###### tags: `android`, `compose`, `functional programming` ###### title: [Compose 系列 - 0] 碎碎念 x 學習路線介紹 # [Compose 系列 - 0] 碎碎念 x 學習路線介紹 [TOC] ## 序 這篇主要是敘述, 學習compose 的心得; 並以第一次學習的角度, 提供個人的學習路線, 資源, 以及建議. --- ## 碎碎念開始 老實說開始學了以後有一種 **被騙了** 的感覺: 剛開始看一些範例: ```kotlin= @Composable fun Greeting() { Colume { Text("Hello world!") } } ``` 哇~~~ 真簡潔有力~~~~ :hearts::hearts::hearts: 我喜歡~ 感覺跟 **網頁框架 react** 好像喔~ 那我也來下水 :ok_hand: 載了[compose-sample](https://github.com/android/compose-samples), 開啟[AS Canary Build](https://developer.android.com/studio/preview) ![](https://i.imgur.com/RZe4Kny.png) ... :thinking_face: ... :confused: :face_with_raised_eyebrow: ... :fearful: :cold_sweat: 這些是三小 :scream::scream::scream: 一堆 `remember`, `effect`, `state` 追了一下, 才知到 > **不是跟react 很像, 它整個就是Functional Programming, 就是react那套搬過來** > _Orz_ 要學的新東西, 不是只有`compose UI`的部分, 連整個 `FP` 都必須好好的研究才行. 因此, 這篇主要是分享以下幾點: :::success - Functional Programming (FP) 學習路線 - Android Compose UI 學習路線 - 資源介紹 ::: ---- ## 學習路線 ### Functional Programming 學習路線 Compose 採用 Functional Programming (**FP**), 跟原有的OOP 有很大的不同。如果你不曾了解FP, 過意味著這個架構你是必須重新學習的. 個人的學習方式, 整理後大致上分成了幾大類: 1. FP核心概念及其重要名詞 > - **頭等類別(First Class)** > - **純函式(Pure Function)** > - **副作用(Side Effect)** > ... :::warning :book: 可參考: - [Mostly Adequate Guide To Functional Programming](https://jigsawye.gitbooks.io/mostly-adequate-guide/content/) - [Functional-Light-JS](https://github.com/getify/Functional-Light-JS) ::: 兩篇雖然都是以JS 為主, 但著實對 FP 介紹的非常詳細 2. 圍繞核心, 應用面的延伸 > - **Composable** > - **Effect** > - **State** > - **Remember** > ... :::warning :book: 可參考: - [Android Compose 官網系列](https://developer.android.com/jetpack/compose/mental-model) - [Compose Side Effect API 介紹](https://juejin.cn/post/6930785944580653070) - [以React Hook 介紹 Android Compose](https://zhuanlan.zhihu.com/p/357885060) ::: 3. 嘗試深入理解 & 重複思考上述名詞的關係 :::warning Google 有深入的介紹, compose 的核心機制 :laughing: :book: 有興趣可參考: - [深入介紹 Compose - 1](https://zhuanlan.zhihu.com/p/267250784) - [深入介紹 Compose - 2](https://juejin.cn/post/6889797083667267598) ::: :::warning :book: 繪製相關 - [最小重組範圍?](https://blog.csdn.net/vitaviva/article/details/115605867) ::: --- ### Jetpack Compose UI 學習路線 以順序來說, 是比較建議對FP 有初步了解, 再學習 `Compose UI`; 當然只學習UI 的部分, 將 FP 的部分切開來也是可以的, 但就只能看一些比較簡單的範例. 以純UI 學習來說: :::warning :book: - [Android Compose UI 官網系列](https://developer.android.com/jetpack/compose/layout) - [Google Accompanist](https://github.com/google/accompanist) > 一些以前 **google material UI** 對應的compose 版本 - [Pic-Collage 介紹 Compose](https://tech.pic-collage.com/%E5%88%9D%E6%8E%A2-jetpack-compose-%E4%BB%8B%E7%B4%B9%E7%AF%87-e5ff3f223965) ::: 以全盤性的學習來說: - [Compose Sample](https://github.com/android/compose-samples) 裡面有許多種類的APP 範例, 像是: > 新聞 ![新聞](https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/JetNews.png) > 聊天室 ![聊天室](https://raw.githubusercontent.com/android/compose-samples/main/readme/screenshots/Jetchat.png) ## 小結 目前compose 學習起來, 我認為比原本的android 框架, 時間成本高出不少, 一來是原本的 UI轉換, 需要一段時間重學, 並不是可以無痛轉換; 再者 FP 的概念, 也不是輕鬆就可以轉換過來的. 我想compose 這套要廣為使用, 可能需要不少的時間. 學習資源會陸續更新, 歡迎大家一起分享留言. ## 其他參考 - [react & compose 屬性對照/比較](https://tigeroakes.com/posts/react-to-compose-dictionary/#)