Kotlin when 结构
Kotlin 的 when
结构可以被认为是 Java switch 语句的替代。它在多个选项中评估一段代码。
示例:简单的 when 表达式
fun main(args: Array<String>) {
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
用作表达式。例如:
fun main(args: Array<String>) {
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<String>) {
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<String>) {
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<String>) {
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.