when
將它的參數(shù)和所有的分支條件順序比較,直到某個分支滿足條件优俘。
when
既可以被當做表達式使用也可以被當做語句使用京办。如果它被當做表達式,符合條件的分支的值就是整個表達式的值帆焕,如果當做語句使用惭婿, 則忽略個別分支的值。
when
類似其他語言的 switch
操作符叶雹。其最簡單的形式如下:
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 注意這個塊
print("x 不是 1 财饥,也不是 2")
}
}
在 when
中,else
同 switch
的 default
折晦。如果其他分支都不滿足條件將會求值 else
分支钥星。
如果很多分支需要用相同的方式處理,則可以把多個分支條件放在一起满着,用逗號分隔:
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
我們也可以檢測一個值在(in
)或者不在(!in
)一個區(qū)間或者集合中:
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
)一個特定類型的值谦炒。注意: 由于智能轉換,你可以訪問該類型的方法和屬性而無需 任何額外的檢測漓滔。
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
when
也可以用來取代 if-else
和 if
鏈编饺。 如果不提供參數(shù),所有的分支條件都是簡單的布爾表達式响驴,而當一個分支的條件為真時則執(zhí)行該分支:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
實例
fun main(args: Array<String>) {
var x = 0
when (x) {
0, 1 -> println("x == 0 or x == 1")
else -> println("otherwise")
}
when (x) {
1 -> println("x == 1")
2 -> println("x == 2")
else -> { // 注意這個塊
println("x 不是 1 透且,也不是 2")
}
}
when (x) {
in 0..10 -> println("x 在該區(qū)間范圍內")
else -> println("x 不在該區(qū)間范圍內")
}
}
輸出結果:
x == 0 or x == 1
x 不是 1 ,也不是 2
x 在該區(qū)間范圍內
when
中使用 in
運算符來判斷集合內是否包含某實例:
fun main(args: Array<String>) {
val items = setOf("apple", "banana", "kiwi")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
}
輸出結果:
apple is fine too