Kotlin進階知識(四)——解析聲明和組件函數

解析聲明:容許展開單個複合值,並使用它來初始化多個單獨的變量。markdown

>>> val p = Point(10, 20)
>>> val (x, y) = p
>>> println(x)
10
>>> println(y)
20
複製代碼

解析聲明用到了約定的原理。要在解構聲明中初始化每一個變量,將調用名爲componentN的函數,其中N是聲明中變量的位置。函數

val (a, b) = p     ------->     val a = p.component1()
                                val b = p.component2()
複製代碼

使用場景:測試

  • 使用解構聲明來返回多個值
// 聲明一個數據類來持有值
data class NameComponents(val name:String, val extension: String)

fun splitFilename(fullName: String): NameComponents {
    val result = fullName.split('.', limit = 2)
    // 返回一個數量類型的實例
    return NameComponents(result[0], result[1])
}

// 測試
// 使用解構聲明來展開這個類
>>> val (name, ext) = splitFilename("example.kt")
>>> println(name)
example
>>> println(ext)
kt
複製代碼
  • 使用解構聲明來處理集合
data class NameComponents(val name:String, val extension: String)

fun splitFilename(fullName: String): NameComponents {
    val (name, extension) = fullName.split('.', limit = 2)
    return NameComponents(name, extension)
}
複製代碼

注意:標準庫只容許使用此語法來訪問一個對象的前五個元素spa

  • 解構聲明和循環
// 定義
fun printEntries(map: Map<String, String>) {
    // 在in循環中用解構聲明
    for((key, value) in map) {
        println("$key -> $value")
    }
}

// 測試
>>> val map = mapOf("Oracle" to "Java", "JetBrains" to "Kotlin")
>>> printEntries(map)
Oracle -> Java
JetBrains -> Kotlin
複製代碼

上述例子用到了兩個Kotlin約定code

  • 迭代一個對象
  • 用於解構聲明
相關文章
相關標籤/搜索