Что выведет код Junior Основы языка обновлено

when с диапазонами и is

Вопрос

Что выведет код? По строке на каждый вывод.

fun describe(x: Any): String = when (x) {
    0 -> "zero"
    in 1..9 -> "digit"
    is Int -> "int"
    is String -> "string of ${x.length}"
    else -> "other"
}

fun main() {
    println(describe(0))
    println(describe(7))
    println(describe(42))
    println(describe("hey"))
    println(describe(2.5))
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: zero, digit, int, string of 3, other. when проверяет ветки сверху вниз и берёт первую подходящую.

Что выведет

zero
digit
int
string of 3
other

Разбор

when проверяет ветки сверху вниз и берёт первую подходящую. 0 совпадает с первой веткой, 7 попадает в диапазон 1..9. 42 не входит в диапазон, но является Int. Для строки срабатывает is String, и благодаря smart cast внутри ветки доступен x.length. 2.5 это Double, он уходит в else.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме