Kotlin 的 when 类似于 Java 的 switch 。
用 if 写的话,是这样的,
fun getStudentScore(name: String) = if (name == "James") {
98
} else if (name == "Wade") {
97
} else if (name == "Harden") {
96
} else {
60
}
Kotlin 中判断字符是否相等可以直接用 ==
。
当判断条件比较多时,适合用 when ,上述例子在 AS 里也会报黄,提示用 when 。
精确匹配
精确匹配就是精确的匹配。(这不废话嘛 →_→ ,上 code)
上述例子用 when 写,就简洁了。
when 语句带参数的写法,
fun getStudentScore(name: String) = when (name) {
"Curry" -> 98
"Wade" -> 97
"Harden","Tom" -> 96
else -> 0
}
when 语句不带参数的写法,适用于还需要对参数进一步判断的场景。
fun getStudentScore2(name: String) = when {
("Jordan") -> 100
name == "Curry" -> 98
name == "Wade" -> 97
name == "Harden" -> 96
name == "Tom" -> 96
else -> 0
}
两种写法都可以,按照实际情况选择就好。
除了精确匹配, when 还可以类型匹配。
类型匹配
顾名思义,就是判断参数是什么类型的。
示例,
fun checkNum (num : Number) = when (num){
is Int -> println("num is Int")
is Double -> println("num is Double")
is Byte -> println("num is Byte")
else -> println("num not known")
}
其中, Number
是 Kotlin 内置的抽象类,Int 、Long 、Float 、Double 等和数字相关的类都是它的子类。
还可以换个写法。
fun checkNum1 (num : Number) {
when (num){
is Int -> println("num is Int")
is Double -> println("num is Double")
is Byte -> println("num is Byte")
else -> println("num not known")
}
}