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

Основы Kotlin

Контроль потока в Kotlin

Функции в Kotlin

Строки в Kotlin

Ориентированный на объекты (OOP) Kotlin

Выражение when в Kotlin

В этой статье вы узнаете о выражении when в Kotlin через различные примеры.

Что такое выражение when в Kotlin

Выражение when в Kotlin можно рассматривать как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.