Kotlin:流程控制之条件语句 if 和 when

时间:2021-12-10 16:34:30

在Kotlin有两种用于判断条件的语句if 和when。

if

在Kotlin,if既可以是条件语句,仅仅用作条件判断,还可以是条件表达式,表达式会返回一个值。

传统的条件判断if语句

var max = a 
if (a < b) max = b

if-else

var max: Int
if (a > b) {
    max = a
} else {
    max = b
}

if表达式

在if表达式里,最后的值作为结果返回,此处不需要使用return语句

val max = if (a > b) a else b

示例里条件成立则返回a,否则返回b,这类似于Java里的三元条件运算。

使用{}把执行内容括起来,最后的值为返回值:

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

示例里条件成立返回最后的值a,否则返回else里最后的值b。

注意:在if表达式里,if-else必须同时存在

when

when类似于C语言里的switch,根据不同条件执行分支语句。

基本使用

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
        print("x is neither 1 nor 2")
    }
}

when语句在括号里接收一个参数,把参数和各个分支作比较,匹配到相应的分支,执行分支代码。如果参数和所有分支都不匹配,执行else里的代码。

合并分支

但又多个分支执行的代码一样的,可以把多个分支合并。

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

任意表达式作为分支条件

任意的表达式都可以作为when的分支条件,这与很多计算机语言要求switch的分支表达式必须为常量不同。

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

布尔表达式

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

用作类型判断

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

注意:此处和if-else表达式一样,可以返回分支的值。

无参数when

when语句可以为空参数,此时分支条件为布尔表达式

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}