熟悉JS的读者朋友们知道,ES6有一个非常好用的特性,解构析值。 这个特性可以帮助我们实现如下简洁的代码:
const {a, b} = {a:"Alice", b:"Bob"}
简单地说,就是拆解一个对象。
我在写kotlin的时候想:kotliin有没有类似的特性呢?
kotlin有一个类似的,但是不是非常好用的特性:Destructuring Declarations
我觉得这部分的文档写得不是很好。我查了相关的中文资料才明白怎么用。
如果解构的是一个data class
实例的话,是很简单的。
data class Person(val x: Int = 1, val y: Int = 2)
val (x, y) = Person()//解构声明
println("x=$x, y=$y")
为什么要使用data class呢?
因为文档里写了:
Since data classes automatically declare componentN() functions, destructuring declarations work here.
所有的data class自动声明了componentN()
。
如果是一般的class,那么我们需要手动加上componentN()
函数。
class Object(val x: Int = 1, val y: Int = 2) {
operator fun component1() = this.x
operator fun component2() = this.x
}
val (x1,y1) = Object()
println("x1=$x1, y1=$y1")
如果需要我们额外加上componentN()函数,代码并不比不使用解构
更简洁。
class Object(val x: Int = 1, val y: Int = 2) {}
val o = Object()
val x1 = Object().x
val y1 = Object().y
println("x1=$x1, y1=$y1")
所以,除非针对data class, destructuring declarations并不是那么好用。