Рассмотрим ситуацию, когда у вас есть большое количество условий для проверки. Хотя вы можете использовать выражение if..else if для обработки ситуации, но Kotlin предоставляет выражение when для более удобной записи. Использование выражения when намного проще и чище по сравнению с написанием множества выражений if…else if . Выражение when последовательно сопоставляет свой аргумент со всеми ветвями, пока не будет выполнено какое-либо условие. Выражение when похоже на оператор switch в C, C++ и Java.
when можно использовать либо как выражение, либо как оператор (т.е. как switch в Java). Если оно используется как выражение, значение первой соответствующей ветви становится значением общего выражения.
fun main(args: Array<String>) {
val day = 2
val result = when (day) {
1 -> "Понедельник"
2 -> "Вторник"
3 -> "Среда"
4 -> "Четверг"
5 -> "Пятница"
6 -> "Суббота"
7 -> "Воскресенье"
else -> "Такого дня нет."
}
println(result)
}
fun main(args: Array<String>) {
val day = 2
when (day) {
1 -> println("Понедельник")
2 -> println("Вторник")
3 -> println("Среда")
4 -> println("Четверг")
5 -> println("Пятница")
6 -> println("Суббота")
7 -> println("Суббота")
else -> println("Такого дня нет.")
}
}
Объединить условия When
fun main(args: Array<String>) {
val day = 2
when (day) {
1, 2, 3, 4, 5 -> println("Рабочий день")
else -> println("Выходной")
}
}
Диапазон в условиях When
Диапазоны Kotlin создаются с помощью двойных точек .. и мы можем использовать их при проверке when с помощью оператора in .
fun main(args: Array<String>) {
val day = 2
when (day) {
in 1..5 -> println("Рабочий день")
else -> println("Выходной")
}
}
Выражения в условиях When
When может использовать произвольные выражения вместо константы в качестве условия ветвления.
fun main(args: Array<String>) {
val x = 20
val y = 10
val z = 10
when (x) {
(y+z) -> print("y + z = x = $x")
else -> print("Условие не выполнено")
}
}
When с блоком кода
В When ответвление можно поместить блок кода, заключенного в фигурные скобки.
fun main(args: Array<String>) {
val day = 2
when (day) {
1 -> {
println("Первый день от выходных")
println("Понедельник")
}
2 -> {
println("Второй день от выходных")
println("Вторник")
}
3 -> {
println("Третий день от выходных")
println("Среда")
}
4 -> println("Четверг")
5 -> println("Пятница")
6 -> println("Суббота")
7 -> println("Воскресенье")
else -> println("Такого дня нет.")
}
}