Kotlin:流程控制之条件语句 if 和 when
在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")
}
 
             
             
             
             
            