內容總結
when不僅僅的switch代替品,而是一個重大的升級版。when可以是一個語句,也可以是一個表達式,這就決定了他的用法很強大,很靈活,意味着駕駛它需要更多的學習成本。
when 將它的參數與所有的分支條件順序比較,直到某個分支滿足條件。
when被當做表達式, 符合條件的分支的值就是整個表達式的值(當分支是個代碼塊是,代碼塊的最後一行表達式的值就是整個表達式的值)
知識要點
可以沒有參數
所有的分支條件都是簡單的布爾表達式,而當一個分支的條件爲真時則執行該分支:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
// if 的寫法是
if (x.isOdd()) {
print("x is odd")
} else if (x.isEven()) {
xxxxx
} else {
xxxxx
}
分支條件可以多個
多個分支條件用“,”分隔
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
分支條件可以是表達式
分支條件除了是常量,也可以是表達式(表達式的值是布爾值就可以)
when (x) {
in 1..10 -> print("x is in the range") // 檢測一個值在(in)或者不在(!in)一個區間或者集合中
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
parseInt(s) -> print("s encodes x")
is String -> x.startsWith("prefix")
is String -> x.startsWith("prefix") //由於智能轉換,你可以訪問該類型的方法與屬性而無需任何額外的檢測。
else -> print("s does not encode x")
}