💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 5 тематических шкал.
Вопрос 5 из 25
Какая небольшая правка заметно повышает надёжность «Повторное значение observable»?
Kotlin Наблюдаемые свойства observable · Повторное значение observable Копировать
// Сохраните назначение фрагмента, но укрепите его контракт.
import kotlin.properties.Delegates
class Model {
var count: Int by Delegates.observable(0) { _, old, new ->
println("$old->$new")
}
}
fun main() { val m = Model(); m.count = 2; m.count = 2 }
Обернуть операцию проверкой и не менять основной контракт: Будет только `0->2`, потому что одинаковые значения автоматически подавляются.
Сохранить API и считать достаточным условие: Второе присваивание завершится IllegalStateException.
Передать ответственность владельцу вызова, предполагая, что будет `2->0`, затем `2->2`, так как параметры идут new, old.
Добавить локальную обработку результата, потому что ничего не будет: делегат работает только для nullable-свойств.
Если повторные равные значения не нужны, сравнивать old/new в callback или использовать поток состояния с подходящей семантикой.
Вопрос 22 из 25
Что изменить в «Наблюдаемая семантика делегата», чтобы скрытое допущение стало явным контрактом?
Kotlin Тестирование и инструменты · Наблюдаемая семантика делегата Копировать
// Сохраните назначение фрагмента, но укрепите его контракт.
class Once<T>(private val factory: () -> T) {
val value: T by lazy(factory)
}
Вынести участок в отдельный метод, считая верным следующее: Сравнить длину сгенерированного класса с обычным полем.
Внедрить factory и счётчик либо fake-делегат, не привязывая проверку к реальным задержкам и планировщику.
Оставить реализацию без изменений и закрепить тестом предположение: Проверить только значение первого чтения, не наблюдая количество вызовов factory.
Оставить структуру прежней, документировав утверждение: Мокировать сам стандартный `lazy`, оставив factory невызванной.
Перенести проверку в вызывающий код, исходя из того, что добавить `Thread.sleep` и считать, что поздний вывод доказывает ленивость.