當有許多條件需要判斷時,若仍然使用 if..else 判斷式,可能會造成程式碼雜亂難懂,會變成這樣。
if (conditionA) {
//do something
} else if (conditionB) {
//do something
} else if (conditionC) {
//do something
} else if (conditionD) {
//do something
} else if (conditionE) {
//do something
} else if (conditionF) {
//do something
} else if (conditionG) {
//do something
} else {
//do something
}
為了避免這樣的情形發生, when 誕生了!
when 可以很有條列的列出在哪種條件下,該做什麼對應程式碼,在後續維護上,可以很明確找到想要找的區塊。
我們以剛剛舉的第一個例子來看,如果今天餐廳收費式採取很多段年齡收費的話用 if..else 就會使得程式碼雜亂,來使用 when 看看吧!
fun chargeByAge(age: Int):Int {
val charge: Int
when(age) {
in 0..6 -> {
charge = 0
}
in 6..14 -> {
charge = 200
}
in 14..65 -> {
charge = 400
}
else -> {
charge = 300
}
}
return charge
}
可以很明確看出有分四個條件, 0~6 6~14 14~65 65以上 而根據年齡不同有不同的收費 0 200 400 300 。
和 if..else 一樣, when 也屬於 expression ,而執行程式碼若只有一行,也可以將 {} 省略,這邊兩個步驟會一起做,若還不熟的同學可以往上在看一次 if..else 的部分,簡化程式碼的部分都是一樣的!
fun chargeByAge(age: Int):Int {
val charge =
when(age) {
in 0..6 -> 0
in 6..14 -> 200
in 14..65 -> 400
else -> 300
}
return charge
}
簡化後更明確可以看出哪一條件下,要執行哪一段程式碼,看起來舒服,日後維護會更舒服!!