Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpEsSW 79 of 123 menu
◀ ▶

Разбор sealed class в when в Kotlin

Если переменная имеет запечатанный тип и в when перечислены все подтипы, ветка else не нужна. Компилятор считает выражение полным так же, как для enum:

sealed class Result { data class Ok(val value: Int) : Result() data class Err(val code: Int) : Result() } fun message(r: Result): String = when (r) { is Result.Ok -> "ok ${r.value}" is Result.Err -> "err ${r.code}" } fun main() { println(message(Result.Err(404))) }

После ветки is Result.Ok внутри этой ветки переменная r имеет тип Result.Ok - тот же smart cast, что и при проверке is у обычного наследника. Поля value и code доступны без as:

sealed class UiEvent { object Refresh : UiEvent() data class Click(val id: String) : UiEvent() } fun handle(event: UiEvent) = when (event) { UiEvent.Refresh -> "reload" is UiEvent.Click -> "tap ${event.id}" } fun main() { println(handle(UiEvent.Click("save"))) }

Ключевое слово when может возвращать значение. Для запечатанного типа с полным набором веток тип результата выводится автоматически:

sealed class Shape { class Circle(val r: Double) : Shape() class Square(val side: Double) : Shape() } fun perimeter(s: Shape): Double = when (s) { is Shape.Circle -> 2 * Math.PI * s.r is Shape.Square -> 4 * s.side } fun main() { println(perimeter(Shape.Square(5.0))) }

Объявите sealed class Token: Empty как object, Bearer с полем value: String. Напишите функцию header(t: Token): String: для Empty верните "", для Bearer - строку "Bearer " с подставленным value. Выведите результат для Token.Bearer("abc").

Объявите sealed class Move: Up, Down, Left, Right как object. Дано:

val step = Move.Left

С помощью when для переменной step запишите в delta пару смещений по осям x и y для этого шага (Left - -1 по x, остальные направления задайте сами). Выведите delta.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить