Kotlin when 表达式

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.
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战