Что выведет код Middle Классы, data и sealed обновлено

when по sealed-иерархии

Вопрос

Что выведет код? По строке на каждый вывод.

sealed interface Result
data class Ok(val value: Int) : Result
data class Fail(val reason: String) : Result
data object Empty : Result

fun show(r: Result): String = when (r) {
    is Ok -> "ok ${r.value}"
    is Fail -> "fail: ${r.reason}"
    Empty -> "empty"
}

fun main() {
    listOf(Ok(1), Fail("timeout"), Empty).forEach { println(show(it)) }
    println(Empty)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: ok 1, fail: timeout, empty, Empty. when по sealed-интерфейсу полный, поэтому else не нужен.

Что выведет

ok 1
fail: timeout
empty
Empty

Разбор

when по sealed-интерфейсу полный, поэтому else не нужен. Для data object проверка без is, по равенству. Smart cast даёт доступ к r.value и r.reason внутри веток. data object печатается как своё имя Empty, у обычного object был бы вид Empty@6d06d69c.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.