Практика на enum и sealed в Kotlin
Сделайте enum class Level
с константами LOW, MID
и HIGH. Дана переменная:
val lv = Level.MID
Выведите имя константы строчными буквами.
Сделайте enum class Color
с полем hex: String:
RED - "f00", GREEN - "0f0",
BLUE - "00f".
Выведите hex для Color.GREEN.
Сделайте enum class Op
с константами PLUS и MINUS.
Напишите функцию calc(a: Int, b: Int, op: Op): Int.
Выведите результат для 7, 3
и Op.MINUS.
Дан sealed class:
sealed class Result {
data class Ok(val value: Int) : Result()
data class Err(val code: Int) : Result()
}
Напишите функцию describe(r: Result): String:
для Ok - строка "v=" и значение,
для Err - "e=" и код.
Выведите описание для Result.Err(404).
Сделайте sealed class State
с вариантами object Idle
и data class Work(val step: Int).
Дана переменная:
val st: State = State.Work(2)
Выведите "idle", "work" и номер шага
или "?" для неизвестного варианта.
Сделайте enum class Size
с константами S, M и L.
Дан список:
val sizes = listOf(Size.S, Size.L, Size.M, Size.S)
Выведите число элементов Size.S.
Сделайте sealed interface Expr
с вариантами data class Num(val v: Int)
и data class Mul(val a: Expr, val b: Expr).
Напишите функцию eval(e: Expr): Int.
Выведите результат для Mul(Num(3), Num(4)).
Сделайте enum class Dir
с константами N, E, S
и W.
Сделайте sealed class Move
с вариантами Step с полями dir: Dir
и len: Int и Stop как object.
Дано движение Move.Step(Dir.E, 5).
Выведите имя направления и len,
разделив пробелом.
Дан enum:
enum class Role { USER, ADMIN }
fun canDelete(role: Role): Boolean {
return role == Role.ADMIN
}
Выведите canDelete(Role.USER)
и canDelete(Role.ADMIN).
Сделайте sealed class Pay
с вариантами Card с полем last4: String
и Cash как object.
Дан список:
val ways: List<Pay> = listOf(
Pay.Cash,
Pay.Card("1234"),
Pay.Card("9999"),
)
Выведите число вариантов Card в списке.