when 可以当作一个表达式来使用,这意味着它可以返回一个值。当 when 作为表达式时,每个分支都必须产生相同类型的值。
val x = 3
val result = when (x) {
1 -> "One"
2 -> "Two"
else -> "Other"
}
println(result) // 输出 "Other"当作语句使用
when 也可以作为一个简单的语句来使用,不返回任何值。这种情况下,每个分支可以是一个语句块。
val x = 3
when (x) {
1 -> println("One")
2 -> println("Two")
else -> println("Other")
}检查多个条件
你可以通过逗号分隔多个条件来检查它们是否满足。
val x = 5
when (x) {
1, 2 -> println("One or Two")
3 -> println("Three")
else -> println("Other")
}使用范围和 in 关键字
when 可以与 in 关键字一起使用,来检查变量是否在一个范围内。
val x = 5
when (x) {
in 1..10 -> println("In range 1 to 10")
!in 1..10 -> println("Not in range 1 to 10")
else -> println("Other")
}使用 is 关键字进行类型检测
when 可以用于类型检测,并且可以自动转换为该类型。
// www.javascriptcn.com code example
fun describe(obj: Any): String =
when (obj) {
is Int -> "An Integer"
is Long -> "A Long"
is Double -> "A Double"
else -> "Unknown"
}
println(describe(42)) // 输出 "An Integer"使用任意表达式作为条件
when 不仅可以基于变量的值进行判断,还可以基于任意表达式的值。
val x = 10
val y = 20
when {
x > y -> println("x is greater than y")
x < y -> println("x is less than y")
else -> println("x equals y")
}使用 lambda 表达式
在某些情况下,when 可以接收一个 lambda 表达式作为条件,这使得它可以执行更复杂的逻辑。
// www.javascriptcn.com code example
val x = 5
when (x) {
is Int -> println("It's an integer")
is String -> println("It's a string")
else -> {
println("It's something else")
// 可以在这里执行更多的代码
}
}使用多个条件合并
可以使用 else if 或者多个 when 分支来实现多条件合并。
val x = 7
when {
x in 1..5 -> println("Between 1 and 5")
x in 6..10 -> println("Between 6 and 10")
else -> println("Outside the range")
}总结
when 是 Kotlin 中非常强大和灵活的条件控制结构。它可以作为表达式或语句使用,可以检查变量的值、类型、范围,甚至可以执行复杂的逻辑。掌握 when 的用法对于写出简洁而高效的 Kotlin 代码至关重要。