构造时的科特琳
Kotlin中的when
构造可以视为Java switch语句的替代。它评估许多替代方案中的一段代码。
示例:表达时简单
fun main(args: Array) {
val a = 12
val b = 5
println("Enter operator either +, -, * or /")
val operator = readLine()
val result = when (operator) {
"+" -> a + b
"-" -> a - b
"*" -> a * b
"/" -> a / b
else -> "$operator operator is invalid operator."
}
println("result = $result")
}
当您运行程序时,输出将如下所示:
Enter operator either +, -, * or /
*
result = 60
上面的程序从用户那里获取输入字符串 (推荐阅读:在Kotlin中从用户那里获取字符串输入)。假设用户输入*
。在这种情况下,将对表达式a * b
求值,并将该值分配给变量result 。
如果不满足任何分支条件(用户输入+
, -
, *或/
除外),则对else
分支求值。
在上面的示例中,我们使用when
作为表达式。但是, when
作为表达式使用when
不是强制性的。例如,
fun main(args: Array) {
val a = 12
val b = 5
println("Enter operator either +, -, * or /")
val operator = readLine()
when (operator) {
"+" -> println("$a + $b = ${a + b}")
"-" -> println("$a - $b = ${a - b}")
"*" -> println("$a * $b = ${a * b}")
"/" -> println("$a / $b = ${a / b}")
else -> println("$operator is invalid")
}
}
当您运行程序时,输出将如下所示:
Enter operator either +, -, * or /
-
12 - 5 = 7
在这里, when
不是表达式(从when
返回的值未分配给任何东西)。在这种情况下, else
分支不是必需的。
可能性很小
用逗号组合两个或多个分支条件。例如,
fun main(args: Array) {
val n = -1
when (n) {
1, 2, 3 -> println("n is a positive integer less than 4.")
0 -> println("n is zero")
-1, -2 -> println("n is a negative integer greater than 3.")
}
}
运行该程序时,输出为:
n is a negative integer greater than 3.
检查范围内的值。例如,
fun main(args: Array) {
val a = 100
when (a) {
in 1..10 -> println("A positive number less than 11.")
in 10..100 -> println("A positive number between 10 and 100 (inclusive)")
}
}
运行该程序时,输出为:
A positive number between 10 and 100 (inclusive)
检查值是否为特定类型。
要在运行时检查值是否为特定类型,可以使用is和!is 运算符。例如,
when (x) {
is Int -> print(x + 1)
is String -> print(x.length + 1)
is IntArray -> print(x.sum())
}
使用表达式作为分支条件。例如,
fun main(args: Array) {
val a = 11
val n = "11"
when (n) {
"cat" -> println("Cat? Really?")
12.toString() -> println("Close but not close enough.")
a.toString() -> println("Bingo! It's eleven.")
}
}
运行该程序时,输出为:
Bingo! It's eleven.