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")
}

results matching ""

    No results matching ""