Что выведет код Middle Делегаты обновлено
lazy и observable: порядок вызовов
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlin.properties.Delegates
class Screen {
val heavy: String by lazy { println("init"); "data" }
var title: String by Delegates.observable("start") { _, old, new ->
println("$old -> $new")
}
}
fun main() {
val s = Screen()
println("created")
println(s.heavy)
println(s.heavy)
s.title = "home"
s.title = "home"
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: created, init, data, data, start -> home, home -> home. Ленивое значение не вычисляется при создании объекта, init печатается при первом обращении, второй раз берётся кеш.
Что выведет
created
init
data
data
start -> home
home -> home
Разбор
Ленивое значение не вычисляется при создании объекта, init печатается при первом обращении, второй раз берётся кеш. Обработчик observable срабатывает на каждое присваивание, даже если значение не изменилось.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.