
3.4 解构
结构化或构造是从不同变量中的值创建对象。而解构则相反——将值从现有对象中提取到变量中。这个功能对于去除混乱、重复的代码非常有用。Kotlin具有类似于JavaScript等语言的解构能力。但与JavaScript不同的是,Kotlin中的解构是基于属性的位置,而不是属性的名称。
让我们从一段冗长的代码开始,然后使用解构对该代码进行重构,以使其简洁。Triple是Kotlin标准库中表示元组的一个类。我们将在5.2节中进一步了解它。现在,我们将使用Triple返回三个值:

这是对上述函数的一个传统的、乏味的调用,来接收结果并分配给三个不同的变量。

这需要多行代码和一些点操作。但是,当函数的返回类型是Pair、Triple或任何数据类时,我们可以使用解构将值提取到变量中,既优雅又简洁。让我们重写代码,这次使用解构。

四行代码变成了简洁的一行代码。getFullName()函数似乎突然返回了多个值——这是一种错觉。在这一行中定义了first、middle和last三个不可变变量,并分别按照第一、第二和第三的顺序立即分配给结果Triple的三个属性。实际上,这是可行的,因为Triple类有专门的方法来帮助进行解构,你将在本书的后面了解到这一点。属性的解构顺序与在源对象的构造函数中初始化属性的顺序相同。
假设我们不关心返回对象的某个属性。例如,如果我们不想要中间的名字,可以使用下划线(_)来跳过它。

类似地,你可以通过使用多个_来跳过多个属性,如下所示:

你可以把_放在任何你想忽略的地方。如果你想在某一特定位置停止,并忽略剩下的部分,那么你不需要使用_来填满所有剩余的空间。例如,如果只想得到中间的名字,可以这样写:

除了在返回类型是数据类时使用解构之外,还可以使用解构从映射条目中提取key和value——参见5.6节。
如果你好奇解构在幕后是如何工作的,以及我提到的那些特殊方法是什么,那么请继续关注,我们将在7.5节中再次讨论解构,并做进一步的探索。