Kotlin實戰(zhàn)閱讀筆記---3

第三章、函數(shù)的定義與調(diào)用

val map = hashMapOf(1 to "one")

to并不是一個特殊的結(jié)構(gòu),而是一個普通函數(shù),被稱為中綴調(diào)用。

要允許使用中綴符號調(diào)用函數(shù),需要使用infix修飾符來標記它。

to函數(shù)聲明:

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

Pair是Kotlin標準庫中的類。Pair用來表示一對元素。

可以直接用Pair的內(nèi)容來初始化兩個變量

var (number, name) = 1 to "one"

這個功能稱為解構(gòu)聲明。

命名參數(shù)和默認值參數(shù)

在Kotlin中,可以在聲明函數(shù)的時候,指定參數(shù)的默認值。

fun <T> joinToString(
        collection: Collection<T>,
        separator: String=",",
        prefix: String="(",
        postfix: String=")"
): String {

    val result = StringBuilder(prefix)

    for ((index, element) in collection.withIndex()) {
        if (index > 0) result.append(separator)
        result.append(element)
    }

    result.append(postfix)
    return result.toString()
}

fun main(args: Array<String>) {
    val list = listOf(1, 2, 3)
    println(joinToString(list, "; ", "(", ")"))
    println(joinToString(list))
    println(joinToString(list, postfix=".", prefix="#"))
}

輸出結(jié)果:

(1; 2; 3)
(1,2,3)
#1,2,3.

注意:參數(shù)的默認值是被編碼到被調(diào)用的函數(shù)中,而不是調(diào)用的地方。

Java沒有參數(shù)默認值的概念。從Java中調(diào)用Kotlin函數(shù)的時候必須顯式地指定所有參數(shù)值。如果需要從java代碼中做頻繁調(diào)用,可以使用@JvmOverloads注解它。這個只是編譯器生成Java重載函數(shù),從最后一個開始省略每個參數(shù)。每個重載函數(shù)的默認參數(shù)值都會被省略。

Jvm只能執(zhí)行類中的代碼。

更改文件類名:@file:JvmName("XXX")。位置:文件開頭,包名之前。

擴展方法和屬性:

擴展函數(shù)并不存在重寫,因為Kotlin會把它們當做靜態(tài)函數(shù)。

如果一個類的成員函數(shù)和擴展函數(shù)有相同的簽名,成員函數(shù)往往會被優(yōu)先使用。

可變參數(shù)的關鍵字vararg,可以用來聲明一個函數(shù)將可能有任意數(shù)量的參數(shù)

但是當傳遞的參數(shù)是已經(jīng)包裝在數(shù)組中時,Kotlin需要顯式地解包數(shù)組,以便每個數(shù)組元素在函數(shù)中能作為單獨的參數(shù)來調(diào)用。即*,被稱為展開運算符。

val arg= arrayOf(1,2,3)
val list = listOf(*arg)
val list1 = listOf(1,2,*arg)

如果不使用*運算符,則list中的數(shù)據(jù)類型為Array[Int],而不是Int。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容