- Jetpack Compose:Android全新UI編程
- 朱江
- 877字
- 2022-05-13 11:04:54
1.3 溫習Kotlin
Compose是基于Kotlin構建的,所以學習Compose之前需要溫習Kotlin的一些知識。
1.3.1 默認參數
在編寫Kotlin的時候,可以在類的構造方法或者普通方法中使用默認參數,以此減少大量重載方法。舉個例子:
class DefaultParam { companion object { private const val TAG = "DefaultParam" } fun test() { test1(0) Test(b = "") } fun test1(a: Int, b: String = "") { Log.e(TAG, "test1: a:$a b:$b") } } data class Test(val a: Int = 0, val b: String)
上面的代碼構建了一個Test類,構造方法中接收兩個參數,第一個有默認值,第二個沒有,所以調用的時候就可以不寫第一個參數。DefaultParam類中還有一個test1的方法,也接收兩個參數,不同的是,第一個參數沒有默認值,也就是必須設置,而第二個參數有默認值。
這兩種調用的區別在于:如果第一個參數沒有默認值,可以省略命名參數,反之則不能省略命名參數。如果一次性將所有參數都傳入而不使用參數默認值,也可省略命名參數。使用命名參數可以使代碼更具描述性。
默認參數在Compose中使用得非常廣泛,基本每一個控件都會用到,因此大家需要掌握Kotlin的默認參數。
1.3.2 高階函數
自從開始學習Kotlin,就一直聽到“高階函數”這個詞,其實它并不難,能接收其他函數作為參數的函數就是高階函數。一個簡單的高階函數如下所示:
class HigherFunctions { companion object { private const val TAG = "HigherFunctions" } fun test() { high({ Log.e(TAG, "test: string: $it") }, "test") } fun high(one: (String) -> Unit, string: String) { // 或者使用one.invoke進行調用 one(string) } }
上面示例代碼中的high就是一個高階函數,因為它接收其他函數作為參數。使用高階函數時,既可以直接傳入lambda表達式,也可以傳入方法。
在Compose中很多地方用到了尾隨lambda表達式。尾隨lambda表達式是Kotlin提供的一種特殊語法,在調用最后一個參數為lambda的高階函數時,可以將lambda表達式放在圓括號后面,而不是將其放在圓括號內。來看一個例子:
fun test2() { high2 { Log.e(TAG, "test: string: $it") } } fun high2(two: () -> Unit) { two() }
上面代碼中的high2是一個高階函數,因為它只有一個參數,其參數類型還是一個函數,所以可以使用尾隨lambda來進行調用,省略了圓括號。
1.3.3 解構數據類
數據類在Kotlin中很常見,前面的例子中也用到了數據類。當我們定義了數據類,想使用它來訪問數據的時候,就可以使用解構聲明了。比如想要訪問前面定義的Test數據類中的參數,可以這么寫:
fun testData(){ val test = Test(a = 10, b = "Zhujiang") val (a, b) = test Log.e(TAG, "testData: a=$a") Log.e(TAG, "testData: b=$b") }
解構聲明使用起來非常方便,大家以后在Compose的編寫過程中如需使用數據類,就可以使用解構聲明來獲取數據。
- PrestaShop 1.3 Theming – Beginner’s Guide
- Procreate插畫入門必修課
- Pro/E Wildfire 5.0中文版入門、精通與實戰
- 攝影輕松入門:Photoshop后期處理
- Premiere Pro CC 2018基礎教程(第3版)
- PostgreSQL 9.0 High Performance
- JBoss Tools 3 Developers Guide
- 好用,Excel數據處理高手
- Revit建模進階標準教程(實戰微課版)
- 中文版3ds Max 2020基礎教程
- 平面設計師實戰教程
- Joomla! 1.5 JavaScript jQuery
- Moodle 1.9 for Design and Technology
- jQuery 1.3 with PHP
- SolidWorks三維設計及工程圖速成