KT Kotlin  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Data class и value-модели

Задания показывают, где data class удобен, а где его сгенерированные операции создают ложное чувство надёжности. Проверяются copy, equals, компоненты деструктуризации и value class — в том числе случаи с изменяемыми вложенными объектами.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 1 из 20
Почему пример «Частичное изменение через copy» даёт именно такой результат?
KotlinКопирование через copy · Частичное изменение через copy
// На ревью требуется объяснить причину поведения.
data class Config(val host: String, val ports: List<Int>)

fun main() {
    val base = Config("api", listOf(80, 443))
    val dev = base.copy(host = "localhost")
    println(dev)
}
Вопрос 2 из 20
Как превратить неявное предположение в проверяемый контракт «Состав равенства data class»?
KotlinРавенство equals · Состав равенства data class
// Сохраните назначение фрагмента, но укрепите его контракт.
data class Key(val code: String) {
    var hits: Int = 0
}

fun main() {
    val a = Key("x").also { it.hits = 1 }
    val b = Key("x").also { it.hits = 99 }
    println(a == b)
}
Вопрос 3 из 20
Что проверить отдельно, чтобы не принять «Доменный идентификатор value class» за универсальное правило?
Вопрос 4 из 20
Что будет напечатано?
KotlinМодели data class · Поверхностный copy data class
// Проследите фактическое выполнение без изменения кода.
data class User(val id: Int, val roles: MutableList<String>)

fun main() {
    val a = User(1, mutableListOf("reader"))
    val b = a.copy()
    b.roles += "editor"
    println(a.roles)
}
Вопрос 5 из 20
Какой дополнительный сценарий нужен для «Состав равенства data class»?
Вопрос 6 из 20
В «Доменный идентификатор value class» выбрали решение: Использовать value class для доменных идентификаторов и величин, не обещая потребителю гарантированное отсутствие аллокаций. Какова его реальная цена?
Вопрос 7 из 20
Какое правило определяет поведение фрагмента «Поверхностный copy data class»?
KotlinМодели data class · Поверхностный copy data class
// На ревью требуется объяснить причину поведения.
data class User(val id: Int, val roles: MutableList<String>)

fun main() {
    val a = User(1, mutableListOf("reader"))
    val b = a.copy()
    b.roles += "editor"
    println(a.roles)
}
Вопрос 8 из 20
Как сделать ответственность во фрагменте «Частичное изменение через copy» понятной следующему разработчику?
KotlinКопирование через copy · Частичное изменение через copy
// Сохраните назначение фрагмента, но укрепите его контракт.
data class Config(val host: String, val ports: List<Int>)

fun main() {
    val base = Config("api", listOf(80, 443))
    val dev = base.copy(host = "localhost")
    println(dev)
}
Вопрос 9 из 20
Какое значение напечатает «Доменный идентификатор value class»?
KotlinКлассы-значения · Доменный идентификатор value class
// Проследите фактическое выполнение без изменения кода.
@JvmInline
value class UserId(val raw: Long)

fun format(id: UserId) = "u-${id.raw}"
fun main() = println(format(UserId(7)))
Вопрос 10 из 20
Как сделать ответственность во фрагменте «Поверхностный copy data class» понятной следующему разработчику?
KotlinМодели data class · Поверхностный copy data class
// Сохраните назначение фрагмента, но укрепите его контракт.
data class User(val id: Int, val roles: MutableList<String>)

fun main() {
    val a = User(1, mutableListOf("reader"))
    val b = a.copy()
    b.roles += "editor"
    println(a.roles)
}
Вопрос 11 из 20
Какой дополнительный сценарий нужен для «Частичное изменение через copy»?
Вопрос 12 из 20
Какова практическая цена решения «Состав равенства data class»: Разместить в primary constructor все поля, определяющие идентичность значения, а служебные счётчики отделить от ключа?
Вопрос 13 из 20
Какой контрпример точнее всего показывает границу «Поверхностный copy data class»?
Вопрос 14 из 20
Предложенная правка для «Частичное изменение через copy» звучит так: Применять `copy` для явных переходов неизменяемой модели, а сложные допустимые переходы оформлять доменными методами. Какой недостаток важнее обсудить?
Вопрос 15 из 20
Как поведёт себя фрагмент «Состав равенства data class» при указанных входных данных?
KotlinРавенство equals · Состав равенства data class
// Проследите фактическое выполнение без изменения кода.
data class Key(val code: String) {
    var hits: Int = 0
}

fun main() {
    val a = Key("x").also { it.hits = 1 }
    val b = Key("x").also { it.hits = 99 }
    println(a == b)
}
Вопрос 16 из 20
Какой контракт снимает спор о причине поведения «Доменный идентификатор value class»?
KotlinКлассы-значения · Доменный идентификатор value class
// На ревью требуется объяснить причину поведения.
@JvmInline
value class UserId(val raw: Long)

fun format(id: UserId) = "u-${id.raw}"
fun main() = println(format(UserId(7)))
Вопрос 17 из 20
Какой объект будет выведен?
KotlinКопирование через copy · Частичное изменение через copy
// Проследите фактическое выполнение без изменения кода.
data class Config(val host: String, val ports: List<Int>)

fun main() {
    val base = Config("api", listOf(80, 443))
    val dev = base.copy(host = "localhost")
    println(dev)
}
Вопрос 18 из 20
Какое объяснение результата «Состав равенства data class» выдерживает проверку соседними случаями?
KotlinРавенство equals · Состав равенства data class
// На ревью требуется объяснить причину поведения.
data class Key(val code: String) {
    var hits: Int = 0
}

fun main() {
    val a = Key("x").also { it.hits = 1 }
    val b = Key("x").also { it.hits = 99 }
    println(a == b)
}
Вопрос 19 из 20
Какая правка устраняет причину риска в «Доменный идентификатор value class», а не только его проявление?
KotlinКлассы-значения · Доменный идентификатор value class
// Сохраните назначение фрагмента, но укрепите его контракт.
@JvmInline
value class UserId(val raw: Long)

fun format(id: UserId) = "u-${id.raw}"
fun main() = println(format(UserId(7)))
Вопрос 20 из 20
Какую обратную сторону имеет решение для «Поверхностный copy data class»: Для независимых снимков использовать неизменяемые коллекции или явно копировать изменяемые вложенные объекты?

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

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

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

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