Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、...
Search
cOnigashima
June 22, 2022
Programming
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、別に使ってもいいんですよね、
cOnigashima
June 22, 2022
More Decks by cOnigashima
See All by cOnigashima
技術ブログを執筆依頼するときに アウトプットによるメリット を考えたはなし
conigashima
0
83
Androidエンジニア少ない!どうしたらいい!
conigashima
0
1.2k
今更聞けない_Playアプリ署名.pdf
conigashima
0
800
Other Decks in Programming
See All in Programming
SODA - FACT BOOK(EN)
sodainc
1
220
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
240
ActionController meets Protocol Buffers
sorah
1
800
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
220
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
190
React Native経験者が Flutterを30⽇間触って驚いたこと
3saito
0
170
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
230
Rails初心者がパスキーを実装してみて大変だったこと
ktombow
0
160
LLM 101
dalinaum
0
470
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
520
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Code Reviewing Like a Champion
maltzj
529
40k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
980
Un-Boring Meetings
codingconduct
0
490
KATA
mclloyd
PRO
35
16k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Paper Plane
katiecoart
PRO
5
55k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
910
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
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/