官术网_书友最值得收藏!

Compose是基于Kotlin構(gòu)建的,所以學(xué)習(xí)Compose之前需要溫習(xí)Kotlin的一些知識(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ù)。

自從開始學(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)。

數(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ù)。

主站蜘蛛池模板: 长沙市| 福建省| 无棣县| 乐东| 贵州省| 凤冈县| 神木县| 壤塘县| 武陟县| 舞阳县| 荔波县| 林芝县| 南江县| 临朐县| 怀仁县| 平泉县| 县级市| 屏南县| 河东区| 惠水县| 青田县| 两当县| 辽源市| 江门市| 密云县| 三门县| 静宁县| 历史| 公安县| 合山市| 亚东县| 壶关县| 普洱| 利辛县| 无锡市| 漠河县| 潞城市| 鹤壁市| 常宁市| 布拖县| 阳新县|