Что выведет код 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 ошибок.