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