Разбор enum в when в Kotlin
Конструкция when по значению enum class
перебирает известные компилятору константы - так же,
как ветки по подтипам при наследовании. Если перечислены
все члены enum, выражение считается исчерпывающим и
else можно опустить:
enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
FRIDAY, SATURDAY, SUNDAY
}
fun label(day: Day): String = when (day) {
Day.MONDAY -> "start"
Day.TUESDAY -> "mid"
Day.WEDNESDAY -> "mid"
Day.THURSDAY -> "mid"
Day.FRIDAY -> "end"
Day.SATURDAY -> "rest"
Day.SUNDAY -> "rest"
}
fun main() {
println(label(Day.FRIDAY))
}
Тот же when может возвращать значение в переменную.
Для enum с полным набором веток тип результата выводится
без else:
enum class PortKind { HTTP, HTTPS, FTP }
fun main() {
val kind = PortKind.HTTPS
val scheme = when (kind) {
PortKind.HTTP -> "http"
PortKind.HTTPS -> "https"
PortKind.FTP -> "ftp"
}
println(scheme)
}
Несколько констант можно объединить в одну ветку через запятую, если для них нужен один и тот же результат:
enum class Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
FRIDAY, SATURDAY, SUNDAY
}
fun isWeekend(day: Day): Boolean = when (day) {
Day.SATURDAY, Day.SUNDAY -> true
Day.MONDAY, Day.TUESDAY, Day.WEDNESDAY,
Day.THURSDAY, Day.FRIDAY -> false
}
fun main() {
println(isWeekend(Day.SUNDAY))
}
Объявите enum class Season с константами
SPRING, SUMMER, AUTUMN
и WINTER.
Напишите функцию isWarm(season: Season):
для SUMMER и SPRING верните
true, для остальных - false.
Вызовите с Season.WINTER и выведите результат.
Объявите enum class Role с константами
GUEST, USER и ADMIN.
Дано:
val role = Role.USER
С помощью when для переменной role
запишите в code число: GUEST -
0, USER - 1,
ADMIN - 2.
Выведите code.