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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
cOnigashima
June 22, 2022
Programming
0
1.2k
JetPackComposeは宣言型プログラミングパラダイムって実はよくわかってないんですが、別に使ってもいいんですよね、
cOnigashima
June 22, 2022
Tweet
Share
More Decks by cOnigashima
See All by cOnigashima
技術ブログを執筆依頼するときに アウトプットによるメリット を考えたはなし
conigashima
0
54
Androidエンジニア少ない!どうしたらいい!
conigashima
0
1.1k
今更聞けない_Playアプリ署名.pdf
conigashima
0
750
Other Decks in Programming
See All in Programming
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
220
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.5k
おれのAgentic Coding 2026/03
tsukasagr
1
120
存在論的プログラミング: 時間と存在を記述する
koriym
5
580
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
280
Kubernetesでセルフホストが簡単なNewSQLを求めて / Seeking a NewSQL Database That's Simple to Self-Host on Kubernetes
nnaka2992
0
190
「速くなった気がする」をデータで疑う
senleaf24
0
110
飯MCP
yusukebe
0
420
モダンOBSプラグイン開発
umireon
0
190
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
570
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
110
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
150
Claude Code のすすめ
schroneko
67
220k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
91
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
190
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Code Reviewing Like a Champion
maltzj
528
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
390
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
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/