when语句
when用来替代类似C语言的switch语句。
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
when语句会顺序的使用参数匹配分支直到有的分支满足条件。when语句可以用来作为表达式或语句。如果作为表达式,匹配的分支的值将作为表达式的值;如果作为语句,每个分支的值会被忽略。(如果作为代码块,最后一个表达式将作为代码的值)
else分支会在没有匹配的分支时执行。如果when作为表达式,else分支是必须的,除非编译器可以证明when的分支已经覆盖了所有的条件。
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
可以使用任意的表达式作为分支条件。
when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
使用in和!in检查值是否在某个范围和集合中。
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
另一个可能性是检查一个值is或!is某种特定类型。需要注意的是,自动转换将可以让你在满足条件的分支直接使用转换后的类型。
val hasPrefix = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
when也可以用来替换if-else语句。如果when语句没有参数,那么分支条件就是简单的布尔表达式,如果分支条件为true,那么分支就会执行。
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}