将 when 用作表达式
从 when 返回值
将 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 反馈 — 无需本地设置。
此课程中的所有课时
- 将 when 用作表达式
- 智能类型转换
- is 与 as 运算符
- 穷尽式 when