跳到主要内容

Kotlin when 表达式

提示
  1. when 结构的用途:Kotlin 中的 when 结构类似于 Java 的 switch 语句,用于在多个备选方案中选择一个执行。
  2. when 作为表达式或语句when 可以作为表达式使用,其返回值可以被赋给变量,也可以单独作为语句使用,其中 else 分支不是必需的。
  3. when 的多样性when 支持多种条件形式,包括将多个条件合并、检查值是否在某个范围内、检查类型以及使用表达式作为分支条件。

Kotlin 中的 when 结构

在 Kotlin 中,when 结构可以被视为 Java switch 语句 的替代品。它在许多备选方案中评估一段代码。

示例:简单的 when 表达式

fun main(args: Array<String>) {

val a = 12
val b = 5

println("请输入运算符,可以是 +, -, * 或 /")
val operator = readLine()

val result = when (operator) {
"+" -> a + b
"-" -> a - b
"*" -> a * b
"/" -> a / b
else -> "$operator 是无效的运算符。"
}

println("结果 = $result")
}

当您运行程序时,输出将类似于:

请输入运算符,可以是 +, -, */
*
结果 = 60

上述程序从用户那里获取一个输入字符串(推荐阅读:在 Kotlin 中从用户获取字符串输入)。假设用户输入了 *。在这种情况下,表达式 a * b 被计算,其值被赋给变量 result

如果没有一个分支条件满足(用户输入除了 +, -, *, 或 / 以外的任何东西),则执行 else 分支。

在上面的例子中,我们将 when 用作表达式。然而,使用 when 作为表达式并不是强制性的。例如,

fun main(args: Array<String>) {

val a = 12
val b = 5

println("请输入运算符,可以是 +, -, * 或 /")
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 是无效的")
}
}

当您运行程序时,输出将类似于:

请输入运算符,可以是 +, -, */
-
12 - 5 = 7

这里,when 不是表达式(when 的返回值没有被赋值给任何东西)。在这种情况下,else 分支不是必须的。

几种可能性

用逗号将两个或多个分支条件结合起来。 例如,

fun main(args: Array<String>) {

val n = -1

when (n) {
1, 2, 3 -> println("n 是小于 4 的正整数。")
0 -> println("n 是零")
-1, -2 -> println("n 是大于 3 的负整数。")
}
}

当您运行程序时,输出将是:

n 是大于 3 的负整数。

检查值是否在范围内。 例如,

fun main(args: Array<String>) {

val a = 100

when (a) {
in 1..10 -> println("一个小于 11 的正数。")
in 10..100 -> println("一个介于 10 到 100 (包括)之间的正数")
}
}

当您运行程序时,输出将是:

一个介于 10100 (包括)之间的正数

检查一个值是否为特定类型。

要在运行时检查一个值是否为特定类型,我们可以使用 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("猫?真的吗?")
12.toString() -> println("接近了,但还不够。")
a.toString() -> println("猜中了!是十一。")
}
}

当您运行程序时,输出将是:

猜中了!是十一。