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

  • 迭代一个对象
  • 用于解构声明
相关文章
相关标签/搜索