English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kotlin when 표현식

이 문서에서는 다양한 예제를 통해 Kotlin에서 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 = $result")
}

当您运行程序时,输出将如下所示:

输入运算符 +, -, * 或 /
*
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 is invalid")
    }
}

当您运行程序时,输出将如下所示:

输入运算符 +, -, * 或 /
-
12 - 5 = 7

这里, when 不是表达式(没有将 when 的返回值赋给任何对象)。 在这种情况下,else 分支不是必需的。

几种可能使用到的场景

1、用逗号组合两个或多个分支条件。예를 들어,

fun main(args: Array<String>) {
    val n = -1
    when (n) {
        1, 2, 3 -> println("n 是正整数小于 4.
        0 -> println("n 为0  ")
        -1, -2 -> println("n 是负整数大于 -3.
    }
}

이 프로그램을 실행할 때, 출력은 다음과 같습니다:

n 是负整数大于 -3.

2、检查范围内的值。예를 들어,

fun main(args: Array<String>) {
    val a = 100
    when (a) {
        in 1..10 -> println("A 是小于11的正数。")
        in 10..100 -> println("介于10和100(包括10和100)之间的正数")
    }
}

이 프로그램을 실행할 때, 출력은 다음과 같습니다:

介于10和100(包括10和100)之间的正数

3、检查值是否为特定类型。

要在运行时检查值是否为特定类型,可以使用 is 和!is 运算符。例如,

when (x) {
    is Int -> print(x + 1)
    is String -> print(x.length + 1)
    is IntArray -> print(x.sum())
}

4표현식을 분기 조건으로 사용합니다.예를 들어,

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.