0Pricing
Kotlin Academy · 课时

解构声明

将对象拆分到变量中

解构声明 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

拆解对象

有时您希望一次从对象中取出多个属性。

Kotlin 的解构声明让您可以在一行代码中,将一个对象赋值给多个变量。

基本解构

在 = 左侧的括号中写入名称。Kotlin 会按顺序将对象的组件赋给这些名称。

数据类会自动支持这一功能。

data class User(val name: String, val age: Int)

fun main() {
    val user = User("Alice", 30)
    val (name, age) = user
    println(name)
    println(age)
}

工作原理

在幕后,解构会调用生成的 component1()、component2() 等函数。

每个变量的位置都会对应到匹配的组件函数。

data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(3, 7)
    println(p.component1())
    println(p.component2())
}

顺序很重要

变量是按位置匹配的,而不是按名称匹配的。

第一个变量始终会获取构造函数的第一个属性,无论您为它取什么名称。

data class Pair2(val first: Int, val second: Int)

fun main() {
    val (a, b) = Pair2(10, 20)
    println(a) // first property
    println(b) // second property
}

跳过组件

使用下划线 _ 跳过不需要的组件。

当只有部分值有用时,这样可以让代码保持整洁。

data class User(val name: String, val age: Int, val city: String)

fun main() {
    val (name, _, city) = User("Mia", 28, "Paris")
    println(name)
    println(city)
}

在循环中使用解构

遍历对象集合时,解构非常实用。

您可以直接在 for 头部解包每个元素。

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("A", 20), User("B", 25))
    for ((name, age) in users) {
        println(name + " is " + age)
    }
}

解构映射条目

映射支持解构,因为其中的条目提供了键和值组件。

这样遍历映射时,代码会非常易读。

fun main() {
    val scores = mapOf("Alice" to 90, "Bob" to 85)
    for ((name, score) in scores) {
        println(name + ": " + score)
    }
}

返回多个值

函数可以返回一个数据类,而调用方可以对结果进行解构。

这是一种简洁的替代输出参数的方式。

data class MinMax(val min: Int, val max: Int)

fun minMax(nums: List<Int>): MinMax {
    return MinMax(nums.min(), nums.max())
}

fun main() {
    val (low, high) = minMax(listOf(3, 1, 8, 5))
    println(low)
    println(high)
}

解构 Pair 和三元组

标准库中的 Pair 和 Triple 也支持解构。

无需定义类,就可以方便地将值快速组合起来。

fun main() {
    val pair = Pair("x", 1)
    val (label, value) = pair
    println(label)
    println(value)
}

Lambda 参数解构

您可以直接在 lambda 的参数列表中进行解构。

遍历条目或成对值时,这种写法很常见。

fun main() {
    val map = mapOf(1 to "one", 2 to "two")
    val text = map.map { (key, value) -> "" + key + "=" + value }
    println(text)
}

综合应用

解构会将对象解包为变量:

  • 在 = 的左侧使用括号
  • 组件按位置匹配
  • 使用 _ 跳过组件
  • 可用于循环、lambda 和返回值
data class Result(val ok: Boolean, val message: String)

fun main() {
    val (ok, message) = Result(true, "done")
    println(ok)
    println(message)
}

快速检查

测试您对解构声明的理解。

总结

您已经学习了解构声明:

  • 将对象解包为多个变量
  • 通过 componentN() 按位置进行匹配
  • 使用 _ 跳过不需要的组件
  • 可用于循环、映射、lambda 和返回值

接下来,您将学习如何在集合(例如集合和映射)中使用数据类。

常见问题解答

「解构声明」课时是免费的吗?

是的 — 「解构声明」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「解构声明」这节课中我会学到什么?

将对象拆分到变量中 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「解构声明」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 声明数据类
  2. copy 与 equals
  3. 解构声明
  4. 集合中的数据类
← 返回 Kotlin Academy