Kotlin解构声明和组件函数
结构声明,这个功能允许你展开单个复合值,并使用它来初始化多个单独的变量。
val p=Point(10,20)
val (x,y)=p
println(x)//10
println(y)//20
一个结构声明看起来像一个普通的变量声明,但它在括号中有多个变量。
使用解构声明来返回多个值
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")
name//example
ext//kt
1.解构声明和循环
解构声明不仅可以用作函数创作的顶层语句,还可以用在其他可以声明的地方,例如in循环。一个很好的例子,是枚举map中的条目。下面是一个小例子,使用这个语法打印给定map中的所有条目。
用解构声明来遍历map
fun printEntries(map:Map<Any,Any>){
for ((key,value) in map){
LogS("$key->$value")
}
}
Oracle->java
JetBrains->kotlin
这个简单的例子用到了两个Kotlin约定:一个是迭代对象,另一个是用于解构声明。Kotlin标准库给map增加一个扩展的iterator函数,用来返回map条目的迭代器。因此,与Java不同的是,可以直接迭代map。它还包含Map.Entry上的拓展函数component1和component2,分别返回它的键和值。实际上,前面的循环被转换成了这样的代码:
for(entry in map.entries){
val key=entry.component1()
val value=entry.component2()
}
这个例子再次印证了拓展函数对于约定的重要性。