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
1.1k
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、別に使ってもいいんですよね、
cOnigashima
June 22, 2022
Tweet
Share
More Decks by cOnigashima
See All by cOnigashima
技術ブログを執筆依頼するときに アウトプットによるメリット を考えたはなし
conigashima
0
24
Androidエンジニア少ない!どうしたらいい!
conigashima
0
990
今更聞けない_Playアプリ署名.pdf
conigashima
0
700
Other Decks in Programming
See All in Programming
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
4
590
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
190
AIともっと楽するE2Eテスト
myohei
9
3.1k
11年かかって やっとVibe Codingに 時代が追いつきましたね
yimajo
0
150
Claude Code派?Gemini CLI派? みんなで比較LT会!_20250716
junholee
1
690
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
40
15k
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
1
220
slogパッケージの深掘り
integral0515
0
120
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
180
効率的な開発手段として VRTを活用する
ishkawa
1
180
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
Hack Claude Code with Claude Code
choplin
8
2.8k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Thoughts on Productivity
jonyablonski
69
4.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
710
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Balancing Empowerment & Direction
lara
1
490
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
A designer walks into a library…
pauljervisheath
207
24k
How to Ace a Technical Interview
jacobian
278
23k
Unsuck your backbone
ammeep
671
58k
Optimizing for Happiness
mojombo
379
70k
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/