Практика enum и sealed в Kotlin
Задачи опираются на приёмы раздела: константы enum,
поля в конструкторе enum, подтипы sealed с
data class и object, исчерпывающий
when без else.
Объявите enum class Weekday с семью днями
недели.
Напишите функцию isWeekend(day: Weekday):
для SATURDAY и SUNDAY верните
true, для остальных дней - false.
Выведите результат для Weekday.SATURDAY.
Объявите enum class OrderStatus с константами
NEW, PAID, SHIPPED
и DONE.
Дана переменная:
val status = OrderStatus.PAID
С помощью when для переменной
status выведите соответствующую
текстовую метку: NEW - "created",
PAID - "paid",
SHIPPED - "on way",
DONE - "finished".
Объявите enum class Traffic с полем
limit: Int: CITY - 60,
ROAD - 90, HIGHWAY - 110.
Выведите все пары "name:limit"
в порядке объявления, каждую с новой строки.
Объявите sealed class ApiResult:
Success с полем payload: String,
Failure с полем error: Int.
Напишите функцию summary(r: ApiResult): String:
для Success верните строку "ok "
и payload, для Failure - строку
"err " и error.
Выведите результат для
ApiResult.Failure(503).
Объявите sealed class Screen:
Loading как object,
Content с полем title: String,
Error с полем message: String.
Дано:
val screen: Screen = Screen.Content("Home")
С помощью when для переменной
screen выведите заголовок экрана
или текст ошибки, для Loading выведите
"wait".
Объявите enum class Channel с константами
EMAIL, SMS и PUSH.
Объявите sealed class Notification:
Sent с полями channel: Channel
и id: Long,
Skipped как object.
Создайте Notification.Sent(Channel.PUSH, 7)
и выведите имя канала и id в одной строке,
между ними один пробел.
Объявите sealed interface Expr:
Num с полем value: Int,
Add с полями left и right
типа Expr.
Напишите функцию eval(e: Expr): Int:
для Num верните value,
для Add - сумму значений
eval(left) и eval(right).
Выведите результат для выражения
Expr.Add(Expr.Num(2), Expr.Num(5)).