В Kotlin when является условным выражением, которое возвращает значение и заменяет оператор switch. Выражение when работает как оператор переключения другого языка (Java, C++, C).
Использование when в качестве выражения
Давайте посмотрим на простой пример выражения when.
fun main(args: Array){
var number = 4
var numberProvided = when(number) {
1 -> "One"
2 -> "Two"
3 -> "Three"
4 -> "Four"
5 -> "Five"
else -> "invalid number"
}
println("You provide $numberProvided")
}
Выход:
You provide Four
Использование без выражения
Не обязательно использовать when в качестве выражения в Котлин, его можно использовать так же, как и в другом языке.
Пример:
fun main(args: Array){
var number = 4
when(number) {
1 -> println("One")
2 -> println("Two")
3 -> println("Three")
4 -> println("Four")
5 -> println("Five")
else -> println("invalid number")
}
}
Выход:
Four
Множественное утверждение в фигурных скобках
Мы можем использовать несколько операторов, заключенных в блок условия.
Например:
fun main(args: Array){
var number = 1
when(number) {
1 -> {
println("Monday")
println("First day of the week")
}
7 -> println("Sunday")
else -> println("Other days")
}
}
Выход:
Monday First day of the week
Несколько ветвей when
Мы можем использовать несколько ветвей условия, разделенных запятой. Они используются, когда нам нужно запустить одну и ту же логику для нескольких вариантов.
fun main(args: Array){
var number = 8
when(number) {
3, 4, 5, 6 ->
println("It is summer season")
7, 8, 9 ->
println("It is rainy season")
10, 11 ->
println("It is autumn season")
12, 1, 2 ->
println("It is winter season")
else -> println("invalid input")
}
}
Выход:
It is rainy season
When в диапазоне
Выражение when также проверяет диапазоны ввода, указанные в условии when. Диапазон создается с помощью оператора ..(двойная точка). Оператор in используется для проверки того, принадлежит ли значение диапазону.
Пример:
fun main(args: Array){
var number = 7
when(number) {
in 1..5 -> println("Input is provided in the range 1 to 5")
in 6..10 -> println("Input is provided in the range 6 to 10")
else -> println("none of the above")
}
}
Выход:
Input is provided in the range 6 to 10
