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

Обобщения

Тест требует читать ограничения типов, понимать стирание и видеть, что reified доступен только в подходящем inline-контексте. Задания охватывают параметры типов, проверки во время выполнения и проектирование обобщённых функций без небезопасных приведений.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 5 тематических шкал.
Вопрос 1 из 25
Какое изменение лучше всего защищает границу «Общий тип под upper bound»?
KotlinОграничения параметров типов · Общий тип под upper bound
// Сохраните назначение фрагмента, но укрепите его контракт.
fun <T> maxLength(a: T, b: T): Int where T : CharSequence =
    maxOf(a.length, b.length)

fun main() = println(maxLength("abc", StringBuilder("hello")))
Вопрос 2 из 25
Где упрощённое объяснение «Проверка reified-типа» перестаёт работать?
Вопрос 3 из 25
Какой побочный эффект существеннее остальных после правки «Smart cast после is»: Предпочитать исчерпывающую предметную модель вместо длинного каскада проверок `Any`, если набор вариантов контролируется приложением?
Вопрос 4 из 25
Какой минимальный набор проверок лучше всего защищает контракт `firstOf`?
KotlinТестирование и инструменты · Проверки generic-утилиты
// Проследите фактическое выполнение без изменения кода.
inline fun <reified T> firstOf(values: List<Any>): T? =
    values.firstOrNull { it is T } as T?

fun main() = println(firstOf<String>(listOf(1, "ok", 2)))
Вопрос 5 из 25
Какой контракт снимает спор о причине поведения «Связь входного и выходного типа»?
KotlinПараметры типов · Связь входного и выходного типа
// На ревью требуется объяснить причину поведения.
fun <T> duplicate(value: T): Pair<T, T> = value to value
fun main() = println(duplicate("kt"))
Вопрос 6 из 25
Для «Проверка reified-типа» предлагают правку: Использовать reified как удобную оболочку, но предусматривать не-inline перегрузку с явным токеном типа для Java и динамических вызовов. Какой компромисс нельзя пропустить?
Вопрос 7 из 25
Что появится в выводе примера «Smart cast после is»?
KotlinПроверка типов · Smart cast после is
// Проследите фактическое выполнение без изменения кода.
fun describe(x: Any): String = when (x) {
    is String -> "text:${x.length}"
    is Int -> "int:${x + 1}"
    else -> "other"
}
fun main() = println(describe("K2"))
Вопрос 8 из 25
На какой контракт языка или библиотеки опирается «Проверки generic-утилиты»?
KotlinТестирование и инструменты · Проверки generic-утилиты
// На ревью требуется объяснить причину поведения.
inline fun <reified T> firstOf(values: List<Any>): T? =
    values.firstOrNull { it is T } as T?

fun main() = println(firstOf<String>(listOf(1, "ok", 2)))
Вопрос 9 из 25
Как сделать ответственность во фрагменте «Связь входного и выходного типа» понятной следующему разработчику?
KotlinПараметры типов · Связь входного и выходного типа
// Сохраните назначение фрагмента, но укрепите его контракт.
fun <T> duplicate(value: T): Pair<T, T> = value to value
fun main() = println(duplicate("kt"))
Вопрос 10 из 25
Какой редкий случай способен сломать наивную трактовку «Общий тип под upper bound»?
Вопрос 11 из 25
Какое объяснение результата «Smart cast после is» выдерживает проверку соседними случаями?
KotlinПроверка типов · Smart cast после is
// На ревью требуется объяснить причину поведения.
fun describe(x: Any): String = when (x) {
    is String -> "text:${x.length}"
    is Int -> "int:${x + 1}"
    else -> "other"
}
fun main() = println(describe("K2"))
Вопрос 12 из 25
Какая правка устраняет причину риска в «Проверки generic-утилиты», а не только его проявление?
KotlinТестирование и инструменты · Проверки generic-утилиты
// Сохраните назначение фрагмента, но укрепите его контракт.
inline fun <reified T> firstOf(values: List<Any>): T? =
    values.firstOrNull { it is T } as T?

fun main() = println(firstOf<String>(listOf(1, "ok", 2)))
Вопрос 13 из 25
На каком входе или состоянии граница «Связь входного и выходного типа» становится заметной?
Вопрос 14 из 25
В «Общий тип под upper bound» выбрали решение: Формулировать минимальную границу, реально нужную алгоритму, а не привязывать функцию к конкретной реализации. Какова его реальная цена?
Вопрос 15 из 25
Какие значения будут выведены?
KotlinМатериализованные параметры reified · Проверка reified-типа
// Проследите фактическое выполнение без изменения кода.
inline fun <reified T> Any?.isType(): Boolean = this is T
fun main() {
    println(42.isType<Int>())
    println(42.isType<String>())
}
Вопрос 16 из 25
Какой контрпример точнее всего показывает границу «Проверки generic-утилиты»?
Вопрос 17 из 25
Какой побочный эффект существеннее остальных после правки «Связь входного и выходного типа»: Использовать параметр типа только там, где между значениями есть реальная связь; иначе более честен конкретный тип или `Any` с явной проверкой?
Вопрос 18 из 25
Почему вызов компилируется и что он выведет?
KotlinОграничения параметров типов · Общий тип под upper bound
// Проследите фактическое выполнение без изменения кода.
fun <T> maxLength(a: T, b: T): Int where T : CharSequence =
    maxOf(a.length, b.length)

fun main() = println(maxLength("abc", StringBuilder("hello")))
Вопрос 19 из 25
Какое объяснение результата «Проверка reified-типа» выдерживает проверку соседними случаями?
KotlinМатериализованные параметры reified · Проверка reified-типа
// На ревью требуется объяснить причину поведения.
inline fun <reified T> Any?.isType(): Boolean = this is T
fun main() {
    println(42.isType<Int>())
    println(42.isType<String>())
}
Вопрос 20 из 25
Что изменить в «Smart cast после is», чтобы скрытое допущение стало явным контрактом?
KotlinПроверка типов · Smart cast после is
// Сохраните назначение фрагмента, но укрепите его контракт.
fun describe(x: Any): String = when (x) {
    is String -> "text:${x.length}"
    is Int -> "int:${x + 1}"
    else -> "other"
}
fun main() = println(describe("K2"))
Вопрос 21 из 25
Что выведет фрагмент «Связь входного и выходного типа»?
KotlinПараметры типов · Связь входного и выходного типа
// Проследите фактическое выполнение без изменения кода.
fun <T> duplicate(value: T): Pair<T, T> = value to value
fun main() = println(duplicate("kt"))
Вопрос 22 из 25
Какое правило определяет поведение фрагмента «Общий тип под upper bound»?
KotlinОграничения параметров типов · Общий тип под upper bound
// На ревью требуется объяснить причину поведения.
fun <T> maxLength(a: T, b: T): Int where T : CharSequence =
    maxOf(a.length, b.length)

fun main() = println(maxLength("abc", StringBuilder("hello")))
Вопрос 23 из 25
Какое изменение лучше всего защищает границу «Проверка reified-типа»?
KotlinМатериализованные параметры reified · Проверка reified-типа
// Сохраните назначение фрагмента, но укрепите его контракт.
inline fun <reified T> Any?.isType(): Boolean = this is T
fun main() {
    println(42.isType<Int>())
    println(42.isType<String>())
}
Вопрос 24 из 25
Какой пограничный сценарий обязательно добавить к проверкам «Smart cast после is»?
Вопрос 25 из 25
Что станет новой точкой внимания после изменения «Проверки generic-утилиты»: Убрать ненужный cast через `filterIsInstance<T>().firstOrNull()` либо локализовать его и доказать инвариант тестами?

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

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

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

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