Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、...
Search
cOnigashima
June 22, 2022
Programming
0
1k
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、別に使ってもいいんですよね、
cOnigashima
June 22, 2022
Tweet
Share
More Decks by cOnigashima
See All by cOnigashima
技術ブログを執筆依頼するときに アウトプットによるメリット を考えたはなし
conigashima
0
17
Androidエンジニア少ない!どうしたらいい!
conigashima
0
960
今更聞けない_Playアプリ署名.pdf
conigashima
0
680
Other Decks in Programming
See All in Programming
ぽちぽち選択するだけでOSSを読めるVSCode拡張機能
ymbigo
14
6.3k
The Missing Link in Angular’s Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
140
fieldalignmentから見るGoの構造体
kuro_kurorrr
0
140
複雑なフォームの jotai 設計 / Designing jotai(state) for Complex Forms #layerx_frontend
izumin5210
6
1.5k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
3
1.5k
オープンソースコントリビュート入門
_katsuma
0
130
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.8k
Cursor/Devin全社導入の理想と現実
saitoryc
29
22k
Носок на сок
bo0om
0
1.3k
note の Elasticsearch 更新系を支える技術
tchov
9
3.6k
読書シェア会 vol.4 『ダイナミックリチーミング 第2版』
kotaro666
0
110
エンジニアが挑む、限界までの越境
nealle
1
330
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
14
1.5k
Practical Orchestrator
shlominoach
187
11k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
840
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
Transcript
JetPackComposeは宣言型プログラミングパラダイ ムって実はよくわかってないんですが、別に使って もいいんですよね、 使ったらAndroid開発がいい方向に進むんでしょう か
自己紹介 • 大西泰司 • Andoridエンジニア5年生 • 株式会社FiNC Technologies所属
目的 下記項目をなんとなく理解する • 「Jetpack Compose は Android 向けの最新の宣言型 UI ツールキットです。」とい
う公式の文言 • それはJetPackComposeがいい感じの開発ってことを意味する? • 命令型と宣言型とか • オブジェクト指向とか関数型プログラミングとか • 厳密な話はしない🥺
命令型プログラミング ・宣言型プログラミング wiki調べ >命令型プログラミングは、プログラムの状態を変化させるステートメントを基本文に用 いる総称的なプログラミングパラダイムである。 >宣言型言語は、ドメイン知識における”what the program must accomplish”(何をなす
べきか)方針で、副作用を排除した式や純粋関数の実装に努める 🤔
命令型と宣言型を大雑把に考える • 命令型 ◦ これまでのxmlでのView • 宣言型 ◦ JetPackCompose
xml JetPackCompose
xml JetPackCompose
xml ビュー階層はウィジェットのツリーとして表現され、 インスタンス化する。各ウィジェットは自身の内部 状態(ステート)を維持し、アプリのロジックで操作 できるようにするsetter/getterを公開します。 ウィジェットはステートレスで、基本的にオブジェクト ではなく関数。setter/getterは公開されない。 JetPackCompose
xml ビュー階層はウィジェットのツリーとして表現され、 インスタンス化する。各ウィジェットは自身の内部 状態(ステート)を維持し、アプリのロジックで操作 できるようにするsetter/getterを公開します。 ウィジェットはステートレスで、基本的にオブジェクト ではなく関数。setter/getterは公開されない。 JetPackCompose オブジェクト指向プログラミング (OOP)的
関数型プログラミング(FP)的
オブジェクト指向プログラミング (OOP) 関数型プログラミング(FP) Viewオブジェクトにsetterで命令し、状態を変更して いる。 @Composable アノテーションによってこの関 数がデータを UI に変換するためのものである
ことをコンパイラに伝え UI を記述。
これの何が嬉しいん
これの何が嬉しいん キーワード • 不変と純粋関数 • ステートレスと状態ホイスティング
不変と純粋関数 CircleCIのブログから引用 • FP の原則ではすべての値を不変として扱います。 値を変更するには、作成済み の値を基本値やコピーとして使用するなどして、新しい値を作成するしかありませ ん。 • FP
では、不変データ型を導入することで、純粋関数を実現できます。 純粋関数と は、引数によってのみ定義される関数です。 引数は変更できないので、純粋関数 は予想どおりに動作することが保証されます。 つまり、引数が同じであれば、返さ れる結果も常に同じです。 他のプログラミング手法では、このような挙動の予測可 能性は保証されません。 https://circleci.com/ja/blog/functional-vs-object-oriented-programming/
不変と純粋関数 • Composable関数は高速な冪等であり副作用がない(であるべき)。 • 何回やっても同じ結果になる、違う値を入れると違うUI ◦ インテリジェントな再コンポーズの話
ステートレスと状態ホイスティング Android Developer 公式の説明 • ステートレスなコンポーザブルとは、一切の状態を保持しないコンポーザブルです。 ステートレスは、状態ホイスティングを使用すると簡単に実現できます。 ◦ オブジェクト指向と異なり、状態を持たない •
状態ホイスティングは、状態をコンポーザブルの呼び出し元に移動してコンポーザ ブルをステートレスにするプログラミング パターンです。 ◦ 関数に渡す引数によって UIを記述する ◦ 依存性注入(Dependency Injection)
ステートレスと状態ホイスティング • コンポーザブル関数から状態を巻き上げ、ロジックを適切なレイ ヤーまで押し上げを考慮させる • 単一データフロー
最終的に公式が考えるアーキテクチャ
これの何が嬉しいん JetPackComposeのコンポーザブル関数、UI記述パターンに従うことで • 関心の分離に則ったプログラミングパターンを実践させる • 状態をViewから引き剥がし、アーキテクチャ意識させる ことが可能
結論 • 「Jetpack Compose は Android 向けの最新の宣言型 UI ツールキットです。」とい うことが意味するのは
• JetPackComposeはより安全なAndroid開発を行うUIツールである その背景として • オブジェクト指向プログラミング・関数型プログラミングのエッセンス、プログラミング のベストプラクティスや原則に基づいている
参考 Android Developer公式 https://developer.android.com/jetpack/compose/mental-model?hl=ja https://developer.android.com/jetpack/compose/lifecycle?hl=ja どちらを選ぶ?関数型プログラミングとオブジェクト指向プログラミング(OOP) https://circleci.com/ja/blog/functional-vs-object-oriented-programming/