Выражение when

Выражение when

Выражение when используется в качестве замены оператора switch, который используется в Си-подобных языках, when получает один параметр и варианты значения которого затем сравниваются внутри блока when. Пишется каждый возможный вариант разделенный -> после которого пишется код или блок кода для выполнения если значение переменной равно этому значению. В качестве последнего варианта используется else, код которого выполняется если ни один из вышеупомянутых вариантов не совпадает:

val a = 10
val b = 20
when (a) {
    // Использование только одной строки кода, которую можно написать без использования блока {}
    b -> println("x = 20") // Значение b = 20, поэтому идет проверка значения с числом 20
    10 -> {
        // Выполняется этот код и происходит выход из блока when
        println("x = 10")
    }
    // Нижеследующая строка вполне правильная для выполнения, так как допустимо использование вычисления: 20-10=10, но в данном примере этот блок кода не выполняется, по причине выхода из блока when при обнаружении первого совпадения, который уже написан до этого варианта
    b - 10 -> {
        println("Value calculated as 10")
    }
    else -> {
        val result = "x not 10 nor 20"
        println(result)
    }
}

В случае проверки на соответствие нескольких совпадений допустимые варианты можно разделить запятой:

val b = 20
when (b) {
    10, 20 -> println("b = 10 or 20")
    else -> println("Not 20")
}

When можно использовать для проверки значения в допустимом диапазоне значений. Например, нам надо проверить соответствует ли возраст конкурсанта диапазону значений от 16 до 25. Если меньше 16 вывести сообщение, что возраст меньше необходимого, если больше 25 сообщить, что возраст больше допустимого. В примере проверка осуществляется через in, но можно также проверять посредством !in:

val userAge = 27 // Возраст участника подавшего анкету

Проверка возраста на допустимость. Свойство absoluteValue возвращает абсолютное значение переменной, что даёт нам возраст больше 0, даже если введено минусовое значение

when(userAge.absoluteValue) {
    in 16..25 -> println("Your age is valid") // Возраст в допустимом диапазоне
    in 0..15 -> println("You are young, come back later") // Возраст меньше допустимого
    else -> println("You comed very late") // Из трёх возможных вариантов два наверху проверили, третий вариант можно передать else.
}