Что выведет код Junior Null-safety обновлено

Цепочка безопасных вызовов

Вопрос

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

data class Address(val city: String?)
data class User(val name: String, val address: Address?)

fun cityOf(u: User?): String = u?.address?.city ?: "unknown"

fun main() {
    println(cityOf(User("A", Address("Kazan"))))
    println(cityOf(User("B", Address(null))))
    println(cityOf(User("C", null)))
    println(cityOf(null))
    println(listOf("x", null, "y").filterNotNull().size)
}

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

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

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

Коротко

Код выведет: Kazan, unknown, unknown, unknown, 2. Цепочка ?. обрывается на первом null, и тогда работает Elvis.

Что выведет

Kazan
unknown
unknown
unknown
2

Разбор

Цепочка ?. обрывается на первом null, и тогда работает Elvis. Неважно, какое звено пустое: пользователь, адрес или город, ответ unknown. filterNotNull() убирает null-элементы, остаются два.

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

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