Что выведет код Middle Null-safety обновлено
let с Elvis и неожиданный результат
Вопрос
Что выведет код? По строке на каждый вывод.
fun label(s: String?): String =
s?.let { if (it.isBlank()) null else it.trim() } ?: "empty"
fun main() {
println(label(" hi "))
println(label(" "))
println(label(null))
val n: Int? = null
println(n?.plus(1) ?: -1)
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: hi, empty, empty, -1. let возвращает результат лямбды.
Что выведет
hi
empty
empty
-1
Разбор
let возвращает результат лямбды. Для " hi " это "hi". Для пробелов лямбда возвращает null, и Elvis подставляет empty; это важная деталь: ?: срабатывает и тогда, когда let выполнился, но вернул null. Для null блок не выполняется вовсе. n?.plus(1) даёт null, отсюда -1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.