KT Kotlin  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Делегирование

Тест охватывает делегирование реализации и свойств: by, lazy, observable и собственные делегаты. Нужно понимать момент вычисления, потокобезопасность, порядок уведомлений и то, какие обязанности делегат берёт на себя, а какие остаются у владельца.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 5 тематических шкал.
Вопрос 1 из 25
На каком входе или состоянии граница «Наблюдаемая семантика делегата» становится заметной?
Вопрос 2 из 25
Какой побочный эффект существеннее остальных после правки «Обёртка через class delegation»: Использовать делегирование для прозрачной обёртки и явно документировать члены, поведение которых меняется?
Вопрос 3 из 25
Какое значение напечатает «Свойство в Map-делегате»?
KotlinДелегированные свойства · Свойство в Map-делегате
// Проследите фактическое выполнение без изменения кода.
class Box {
    private val data = mutableMapOf<String, Any?>()
    var name: String by data
}
fun main() {
    val b = Box(); b.name = "Kotlin"; println(b.name)
}
Вопрос 4 из 25
Что точнее описывает механику фрагмента «Кэширование lazy»?
KotlinЛенивая инициализация lazy · Кэширование lazy
// На ревью требуется объяснить причину поведения.
val token: String by lazy {
    println("compute")
    "abc"
}
fun main() {
    println(token)
    println(token)
}
Вопрос 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 }
Вопрос 6 из 25
Чем завершится выполнение «Обёртка через class delegation»?
KotlinДелегирование реализации класса · Обёртка через class delegation
// Проследите фактическое выполнение без изменения кода.
interface Logger { fun log(msg: String) }
class ConsoleLogger : Logger { override fun log(msg: String) = println(msg) }
class PrefixLogger(private val base: Logger) : Logger by base {
    override fun log(msg: String) = base.log("[app] $msg")
}
fun main() = PrefixLogger(ConsoleLogger()).log("start")
Вопрос 7 из 25
Какое правило определяет поведение фрагмента «Свойство в Map-делегате»?
KotlinДелегированные свойства · Свойство в Map-делегате
// На ревью требуется объяснить причину поведения.
class Box {
    private val data = mutableMapOf<String, Any?>()
    var name: String by data
}
fun main() {
    val b = Box(); b.name = "Kotlin"; println(b.name)
}
Вопрос 8 из 25
Как превратить неявное предположение в проверяемый контракт «Кэширование lazy»?
KotlinЛенивая инициализация lazy · Кэширование lazy
// Сохраните назначение фрагмента, но укрепите его контракт.
val token: String by lazy {
    println("compute")
    "abc"
}
fun main() {
    println(token)
    println(token)
}
Вопрос 9 из 25
Что добавить в регрессионный набор для «Повторное значение observable»?
Вопрос 10 из 25
Команда собирается внедрить factory и счётчик либо fake-делегат, не привязывая проверку к реальным задержкам и планировщику. Что придётся учитывать после внедрения в «Наблюдаемая семантика делегата»?
Вопрос 11 из 25
Что стоит исправить в «Свойство в Map-делегате» перед слиянием?
KotlinДелегированные свойства · Свойство в Map-делегате
// Сохраните назначение фрагмента, но укрепите его контракт.
class Box {
    private val data = mutableMapOf<String, Any?>()
    var name: String by data
}
fun main() {
    val b = Box(); b.name = "Kotlin"; println(b.name)
}
Вопрос 12 из 25
Какой соседний случай отличает устойчивое решение «Кэширование lazy» от удачного примера?
Вопрос 13 из 25
Какова практическая цена решения «Повторное значение observable»: Если повторные равные значения не нужны, сравнивать old/new в callback или использовать поток состояния с подходящей семантикой?
Вопрос 14 из 25
Как проверить делегат `lazy` без хрупкой зависимости от времени?
KotlinТестирование и инструменты · Наблюдаемая семантика делегата
// Проследите фактическое выполнение без изменения кода.
class Once<T>(private val factory: () -> T) {
    val value: T by lazy(factory)
}
Вопрос 15 из 25
Какой контракт определяет наблюдаемый результат «Обёртка через class delegation»?
KotlinДелегирование реализации класса · Обёртка через class delegation
// На ревью требуется объяснить причину поведения.
interface Logger { fun log(msg: String) }
class ConsoleLogger : Logger { override fun log(msg: String) = println(msg) }
class PrefixLogger(private val base: Logger) : Logger by base {
    override fun log(msg: String) = base.log("[app] $msg")
}
fun main() = PrefixLogger(ConsoleLogger()).log("start")
Вопрос 16 из 25
Какое ограничение сохранится после правки «Кэширование lazy»: Выбирать `PUBLICATION` или `NONE` только после анализа конкурентного доступа и допустимости повторного вычисления?
Вопрос 17 из 25
Что выведет наблюдатель?
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 }
Вопрос 18 из 25
Какой контракт определяет наблюдаемый результат «Наблюдаемая семантика делегата»?
KotlinТестирование и инструменты · Наблюдаемая семантика делегата
// На ревью требуется объяснить причину поведения.
class Once<T>(private val factory: () -> T) {
    val value: T by lazy(factory)
}
Вопрос 19 из 25
Что следует изменить прежде всего во фрагменте «Обёртка через class delegation»?
KotlinДелегирование реализации класса · Обёртка через class delegation
// Сохраните назначение фрагмента, но укрепите его контракт.
interface Logger { fun log(msg: String) }
class ConsoleLogger : Logger { override fun log(msg: String) = println(msg) }
class PrefixLogger(private val base: Logger) : Logger by base {
    override fun log(msg: String) = base.log("[app] $msg")
}
fun main() = PrefixLogger(ConsoleLogger()).log("start")
Вопрос 20 из 25
Какой пограничный сценарий обязательно добавить к проверкам «Свойство в Map-делегате»?
Вопрос 21 из 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 }
Вопрос 22 из 25
Что изменить в «Наблюдаемая семантика делегата», чтобы скрытое допущение стало явным контрактом?
KotlinТестирование и инструменты · Наблюдаемая семантика делегата
// Сохраните назначение фрагмента, но укрепите его контракт.
class Once<T>(private val factory: () -> T) {
    val value: T by lazy(factory)
}
Вопрос 23 из 25
Какой пограничный сценарий обязательно добавить к проверкам «Обёртка через class delegation»?
Вопрос 24 из 25
Какой риск не исчезает после правки «Свойство в Map-делегате»: Применять Map-делегат для динамических адаптеров осторожно, проверяя тип и наличие ключа на границе?
Вопрос 25 из 25
Как поведёт себя фрагмент «Кэширование lazy» при указанных входных данных?
KotlinЛенивая инициализация lazy · Кэширование lazy
// Проследите фактическое выполнение без изменения кода.
val token: String by lazy {
    println("compute")
    "abc"
}
fun main() {
    println(token)
    println(token)
}

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу