Kotlin Academy · 课时

将 when 用作表达式

从 when 返回值

第 1 / 4 课13 个步骤

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

将 when 用作表达式

Kotlin 的 when 不只是 switch 语句。它是一个表达式,也就是说,它会生成一个可以赋值或返回的值。

这使分支逻辑更加简洁易读。

返回一个值

将 when 用作表达式时,每个分支都会提供一个结果。匹配分支的值会成为整个 when 的结果。

fun main() {
    val day = 3
    val name = when (day) {
        1 -> "Monday"
        2 -> "Tuesday"
        3 -> "Wednesday"
        else -> "Other"
    }
    println(name)
}

必须使用 else

将 when 用作表达式时,必须覆盖所有情况。对于任意值,这意味着必须提供 else 分支。

如果没有它,编译器就无法保证一定会生成值。

fun grade(score: Int): String = when {
    score >= 90 -> "A"
    score >= 80 -> "B"
    else -> "C"
}

fun main() {
    println(grade(85))
}

每个分支使用多个值

使用逗号分隔多个值,即可让它们共用一个分支。

这比重复编写相同的主体更加整洁。

fun main() {
    val day = 6
    val type = when (day) {
        1, 2, 3, 4, 5 -> "Weekday"
        6, 7 -> "Weekend"
        else -> "Invalid"
    }
    println(type)
}

不带参数的 when

省略主题后,每个分支都会变成一个布尔条件。

这可以用整洁的代码块替代一连串的 if/else if。

fun main() {
    val temp = 18
    val feel = when {
        temp < 0 -> "Freezing"
        temp < 15 -> "Cold"
        temp < 25 -> "Mild"
        else -> "Hot"
    }
    println(feel)
}

分支中的范围

分支可以使用 in 检查范围。

这种写法非常自然地表达了数值区间。

fun main() {
    val score = 73
    val band = when (score) {
        in 0..59 -> "Fail"
        in 60..79 -> "Pass"
        in 80..100 -> "Excellent"
        else -> "Invalid"
    }
    println(band)
}

分支中的类型检查

分支可以使用 is 检查类型。

每个分支的结果可以不同,而 when 会返回它们的公共类型。

fun describe(x: Any): String = when (x) {
    is Int -> "Integer"
    is String -> "Text"
    else -> "Unknown"
}

fun main() {
    println(describe(42))
    println(describe("hi"))
}

分支代码块

一个分支可以是包含多条语句的代码块。代码块中的最后一个表达式就是它的值。

fun main() {
    val n = 5
    val result = when {
        n > 0 -> {
            val doubled = n * 2
            "Positive, doubled is " + doubled
        }
        else -> "Non-positive"
    }
    println(result)
}

直接返回 when

函数可以使用单表达式函数体,直接返回一个 when 表达式。

这是 Kotlin 中非常常见且简洁的写法。

fun sign(n: Int): String = when {
    n > 0 -> "positive"
    n < 0 -> "negative"
    else -> "zero"
}

fun main() {
    println(sign(-4))
}

捕获主题值

您可以在 when 内声明主题值,使其能够在各个分支中使用。

这样可以严格限制临时值的作用域。

fun describeLength(text: String): String = when (val len = text.length) {
    0 -> "empty"
    in 1..5 -> "short (" + len + ")"
    else -> "long (" + len + ")"
}

fun main() {
    println(describeLength("hello"))
}

综合应用

作为表达式,when 是一个强大的值生成器:

  • 每个分支都会提供一个结果
  • else 使其覆盖所有情况
  • 支持逗号、范围、类型和代码块
fun ticketPrice(age: Int): Int = when {
    age < 6 -> 0
    age < 18 -> 10
    age >= 65 -> 8
    else -> 15
}

fun main() {
    println(ticketPrice(4))
    println(ticketPrice(70))
}

快速检查

测试您对将 when 用作表达式的理解。

总结

您已经学习了将 when 用作表达式:

  • 返回匹配分支的值
  • 需要 else 才能覆盖所有情况
  • 支持逗号、范围、类型检查和代码块

接下来,您将了解智能转换如何让编译器为您缩小类型范围。

免费开始

用 AI 导师学习 Kotlin — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
51
课程
203

常见问题解答

「将 when 用作表达式」课时是免费的吗?

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

「将 when 用作表达式」这节课中我会学到什么?

从 when 返回值 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

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

「将 when 用作表达式」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 将 when 用作表达式
  2. 智能类型转换
  3. is 与 as 运算符
  4. 穷尽式 when
← 返回 Kotlin Academy