書名: Jetpack Compose:Android全新UI編程作者名: 朱江本章字?jǐn)?shù): 877字更新時(shí)間: 2022-05-13 11:04:54
1.3 溫習(xí)Kotlin
Compose是基于Kotlin構(gòu)建的,所以學(xué)習(xí)Compose之前需要溫習(xí)Kotlin的一些知識(shí)。
1.3.1 默認(rèn)參數(shù)
在編寫Kotlin的時(shí)候,可以在類的構(gòu)造方法或者普通方法中使用默認(rèn)參數(shù),以此減少大量重載方法。舉個(gè)例子:
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)
上面的代碼構(gòu)建了一個(gè)Test類,構(gòu)造方法中接收兩個(gè)參數(shù),第一個(gè)有默認(rèn)值,第二個(gè)沒有,所以調(diào)用的時(shí)候就可以不寫第一個(gè)參數(shù)。DefaultParam類中還有一個(gè)test1的方法,也接收兩個(gè)參數(shù),不同的是,第一個(gè)參數(shù)沒有默認(rèn)值,也就是必須設(shè)置,而第二個(gè)參數(shù)有默認(rèn)值。
這兩種調(diào)用的區(qū)別在于:如果第一個(gè)參數(shù)沒有默認(rèn)值,可以省略命名參數(shù),反之則不能省略命名參數(shù)。如果一次性將所有參數(shù)都傳入而不使用參數(shù)默認(rèn)值,也可省略命名參數(shù)。使用命名參數(shù)可以使代碼更具描述性。
默認(rèn)參數(shù)在Compose中使用得非常廣泛,基本每一個(gè)控件都會(huì)用到,因此大家需要掌握Kotlin的默認(rèn)參數(shù)。
1.3.2 高階函數(shù)
自從開始學(xué)習(xí)Kotlin,就一直聽到“高階函數(shù)”這個(gè)詞,其實(shí)它并不難,能接收其他函數(shù)作為參數(shù)的函數(shù)就是高階函數(shù)。一個(gè)簡(jiǎn)單的高階函數(shù)如下所示:
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進(jìn)行調(diào)用 one(string) } }
上面示例代碼中的high就是一個(gè)高階函數(shù),因?yàn)樗邮掌渌瘮?shù)作為參數(shù)。使用高階函數(shù)時(shí),既可以直接傳入lambda表達(dá)式,也可以傳入方法。
在Compose中很多地方用到了尾隨lambda表達(dá)式。尾隨lambda表達(dá)式是Kotlin提供的一種特殊語(yǔ)法,在調(diào)用最后一個(gè)參數(shù)為lambda的高階函數(shù)時(shí),可以將lambda表達(dá)式放在圓括號(hào)后面,而不是將其放在圓括號(hào)內(nèi)。來(lái)看一個(gè)例子:
fun test2() { high2 { Log.e(TAG, "test: string: $it") } } fun high2(two: () -> Unit) { two() }
上面代碼中的high2是一個(gè)高階函數(shù),因?yàn)樗挥幸粋€(gè)參數(shù),其參數(shù)類型還是一個(gè)函數(shù),所以可以使用尾隨lambda來(lái)進(jìn)行調(diào)用,省略了圓括號(hào)。
1.3.3 解構(gòu)數(shù)據(jù)類
數(shù)據(jù)類在Kotlin中很常見,前面的例子中也用到了數(shù)據(jù)類。當(dāng)我們定義了數(shù)據(jù)類,想使用它來(lái)訪問(wèn)數(shù)據(jù)的時(shí)候,就可以使用解構(gòu)聲明了。比如想要訪問(wèn)前面定義的Test數(shù)據(jù)類中的參數(shù),可以這么寫:
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") }
解構(gòu)聲明使用起來(lái)非常方便,大家以后在Compose的編寫過(guò)程中如需使用數(shù)據(jù)類,就可以使用解構(gòu)聲明來(lái)獲取數(shù)據(jù)。
- Moodle 2.0 E/Learning Course Development
- 中文版3ds Max 2024完全自學(xué)教程
- PPT設(shè)計(jì)實(shí)用教程
- AI繪畫實(shí)戰(zhàn):Midjourney從新手到高手
- ASP.NET jQuery Cookbook
- Seam 2 Web Development: LITE
- 邊做邊學(xué):平面設(shè)計(jì)(Photoshop CS6 +CorelDRAW X6)
- NetSuite OneWorld Implementation 2011 R2
- Photoshop+CorelDRAW 字體設(shè)計(jì)與創(chuàng)意:草圖/實(shí)現(xiàn)/包裝(微課版)
- Mastering Zabbix
- 中文版Photoshop CS6完全自學(xué)手冊(cè)(超值版)
- Origin 2022科學(xué)繪圖與數(shù)據(jù)分析(高級(jí)應(yīng)用篇)
- Python氣象應(yīng)用編程
- 會(huì)聲會(huì)影X8 DV影片制作/編輯/刻盤實(shí)戰(zhàn)從入門到精通
- Photoshop移動(dòng)UI設(shè)計(jì)