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

Типы, переменные и null-безопасность

Базовые средства Kotlin собраны в задачах, где одна мелочь меняет результат: val и var, nullable-типы, безопасные вызовы и оператор Элвиса. Проверяется умение проследить тип выражения и не подменять отсутствие значения пустой строкой или нулём без явного решения.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 1 из 20
Как превратить неявное предположение в проверяемый контракт «Ранний возврат и smart cast»?
KotlinNullable-типы · Ранний возврат и smart cast
// Сохраните назначение фрагмента, но укрепите его контракт.
fun normalize(raw: String?): Int {
    val text = raw ?: return -1
    return text.trim().length
}

fun main() = println(normalize("  kt  "))
Вопрос 2 из 20
Что проверить отдельно, чтобы не принять «Цепочка безопасных вызовов» за универсальное правило?
Вопрос 3 из 20
Для «Elvis после takeIf» предлагают правку: Подставлять значение по умолчанию только там, где оно не смешивается с реальным пользовательским значением и не маскирует ошибку входа. Какой компромисс нельзя пропустить?
Вопрос 4 из 20
Какой принцип лежит в основе поведения «Изменение объекта, связанного с val»?
Kotlinval и var · Изменение объекта, связанного с val
// На ревью требуется объяснить причину поведения.
fun main() {
    val tags = mutableListOf("jvm")
    tags += "android"
    // tags = mutableListOf("native")
    println(tags.joinToString("/"))
}
Вопрос 5 из 20
В «Цепочка безопасных вызовов» выбрали решение: Если отсутствие города допустимо, завершить цепочку осмысленным Elvis-значением; если нет — вернуть ошибку валидации до отображения. Какова его реальная цена?
Вопрос 6 из 20
Какие две строки напечатает программа?
KotlinОператор Элвиса · Elvis после takeIf
// Проследите фактическое выполнение без изменения кода.
fun label(name: String?): String =
    name?.takeIf { it.isNotBlank() } ?: "гость"

fun main() {
    println(label("   "))
    println(label("Ada"))
}
Вопрос 7 из 20
Что стоит исправить в «Изменение объекта, связанного с val» перед слиянием?
Kotlinval и var · Изменение объекта, связанного с val
// Сохраните назначение фрагмента, но укрепите его контракт.
fun main() {
    val tags = mutableListOf("jvm")
    tags += "android"
    // tags = mutableListOf("native")
    println(tags.joinToString("/"))
}
Вопрос 8 из 20
Какой соседний случай отличает устойчивое решение «Ранний возврат и smart cast» от удачного примера?
Вопрос 9 из 20
Что точнее описывает механику фрагмента «Elvis после takeIf»?
KotlinОператор Элвиса · Elvis после takeIf
// На ревью требуется объяснить причину поведения.
fun label(name: String?): String =
    name?.takeIf { it.isNotBlank() } ?: "гость"

fun main() {
    println(label("   "))
    println(label("Ada"))
}
Вопрос 10 из 20
На каком входе или состоянии граница «Изменение объекта, связанного с val» становится заметной?
Вопрос 11 из 20
Какова практическая цена решения «Ранний возврат и smart cast»: Свести проверку отсутствия значения к одной точке — раннему возврату, `requireNotNull` или явному преобразованию в доменный результат?
Вопрос 12 из 20
Какое значение напечатает «Цепочка безопасных вызовов»?
KotlinБезопасные вызовы · Цепочка безопасных вызовов
// Проследите фактическое выполнение без изменения кода.
data class Profile(val city: String?)
data class User(val profile: Profile?)

fun main() {
    val user = User(Profile(null))
    println(user.profile?.city?.uppercase())
}
Вопрос 13 из 20
Решение для «Изменение объекта, связанного с val»: Если вызывающему коду не следует менять коллекцию, принимать и возвращать `List<String>`, а изменяемый список держать внутри владельца состояния. Что в нём остаётся не бесплатным?
Вопрос 14 из 20
Каков результат вызова `normalize(" kt ")`?
KotlinNullable-типы · Ранний возврат и smart cast
// Проследите фактическое выполнение без изменения кода.
fun normalize(raw: String?): Int {
    val text = raw ?: return -1
    return text.trim().length
}

fun main() = println(normalize("  kt  "))
Вопрос 15 из 20
Какой контракт снимает спор о причине поведения «Цепочка безопасных вызовов»?
KotlinБезопасные вызовы · Цепочка безопасных вызовов
// На ревью требуется объяснить причину поведения.
data class Profile(val city: String?)
data class User(val profile: Profile?)

fun main() {
    val user = User(Profile(null))
    println(user.profile?.city?.uppercase())
}
Вопрос 16 из 20
Что изменить в «Elvis после takeIf», чтобы скрытое допущение стало явным контрактом?
KotlinОператор Элвиса · Elvis после takeIf
// Сохраните назначение фрагмента, но укрепите его контракт.
fun label(name: String?): String =
    name?.takeIf { it.isNotBlank() } ?: "гость"

fun main() {
    println(label("   "))
    println(label("Ada"))
}
Вопрос 17 из 20
Какое объяснение результата «Ранний возврат и smart cast» выдерживает проверку соседними случаями?
KotlinNullable-типы · Ранний возврат и smart cast
// На ревью требуется объяснить причину поведения.
fun normalize(raw: String?): Int {
    val text = raw ?: return -1
    return text.trim().length
}

fun main() = println(normalize("  kt  "))
Вопрос 18 из 20
Какая правка устраняет причину риска в «Цепочка безопасных вызовов», а не только его проявление?
KotlinБезопасные вызовы · Цепочка безопасных вызовов
// Сохраните назначение фрагмента, но укрепите его контракт.
data class Profile(val city: String?)
data class User(val profile: Profile?)

fun main() {
    val user = User(Profile(null))
    println(user.profile?.city?.uppercase())
}
Вопрос 19 из 20
Какой сценарий выявит скрытое ограничение «Elvis после takeIf»?
Вопрос 20 из 20
Что напечатает программа, если закомментированная строка остаётся выключенной?
Kotlinval и var · Изменение объекта, связанного с val
// Проследите фактическое выполнение без изменения кода.
fun main() {
    val tags = mutableListOf("jvm")
    tags += "android"
    // tags = mutableListOf("native")
    println(tags.joinToString("/"))
}

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

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

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

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