Kotlin 中的条件控制语句包括 if
表达式和 when
表达式,它们都可以作为表达式使用,返回一个值。
if 表达式和返回值
当 if
表达式作为表达式使用时,它的返回值由两个分支中的一个确定。如果 if
分支的代码块只包含一个表达式,那么这个表达式的值就是 if
表达式的返回值。如果 if
分支的代码块包含多个语句,那么最后一个语句的值就是 if
表达式的返回值。如果 else
分支的代码块只包含一个表达式,那么这个表达式的值就是 if
表达式的返回值。如果 else
分支的代码块包含多个语句,那么最后一个语句的值就是 if
表达式的返回值。下面是一个示例:
val result = if (a > b) {
println("$a is greater than $b")
a
} else {
println("$b is greater than $a")
b
}
在上面的示例中,如果 a
大于 b
,则输出 "$a is greater than $b"
,并返回 a
;否则输出 "$b is greater than $a"
,并返回 b
。
when 表达式的返回值
when
表达式的返回值由选项中最后一个表达式的值决定。如果选项中的代码块只包含一个表达式,那么这个表达式的值就是选项的返回值。如果选项中的代码块包含多个语句,那么最后一个语句的值就是选项的返回值。如果没有匹配的选项并且没有 else
分支,when
表达式的返回值就是 Unit
类型的值 Unit
。下面是一个示例:
val result = when (x) {
1 -> "one"
2 -> "two"
else -> {
println("unknown number")
"unknown"
}
}
在上面的示例中,如果 x
等于 1
,则返回 "one"
;如果 x
等于 2
,则返回 "two"
;否则输出 "unknown number"
,并返回 "unknown"
。
需要注意的是,当 when
表达式作为语句使用时,它不会返回任何值。
when的多种匹配
Kotlin 中的 when
表达式支持多种匹配方式,包括:
- 使用常量或变量作为选项:
when (x) {
1 -> println("x is 1")
2 -> println("x is 2")
else -> println("x is neither 1 nor 2")
}
- 使用表达式作为选项:
when (x) {
is String -> println("x is a String")
!is String -> println("x is not a String")
else -> println("unknown type")
}
- 使用范围或集合作为选项:
when (x) {
in 1..10 -> println("x is in the range [1, 10]")
in arrayOf(1, 3, 5) -> println("x is one of 1, 3, 5")
!in 10..20 -> println("x is not in the range [10, 20]")
}
- 使用任意条件作为选项:
when {
x.isOdd() -> println("x is odd")
x.isEven() -> println("x is even")
else -> println("unknown number")
}
在上面的示例中,isOdd()
和 isEven()
是自定义的扩展函数,它们返回布尔值。
如果需要在选项中执行多个语句,可以使用代码块:
when (x) {
1 -> {
println("x is 1")
println("one")
}
2 -> {
println("x is 2")
println("two")
}
else -> {
println("x is neither 1 nor 2")
println("unknown")
}
}
需要注意的是,when
表达式必须包含至少一个选项。如果没有匹配的选项并且没有 else
分支,编译器会报错。如果需要忽略某个选项,可以使用下划线 _
作为选项的名称。例如:
when (x) {
1 -> println("x is 1")
_ -> println("unknown number")
}
在上面的示例中,如果 x
等于 1
,则输出 "x is 1"
;否则输出 "unknown number"
。