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

Исключения и Result

Задания сравнивают исключения и Result без лозунгов о «правильном» стиле. Проверяются try как выражение, собственные типы ошибок, runCatching и сохранение контекста, достаточного для диагностики и осмысленной реакции вызывающего кода.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 1 из 20
Какое изменение лучше всего защищает границу «Цепочка Result»?
KotlinОбработка через runCatching · Цепочка Result
// Сохраните назначение фрагмента, но укрепите его контракт.
fun main() {
    val result = runCatching { "7x".toInt() }
        .map { it * 2 }
        .getOrElse { -1 }
    println(result)
}
Вопрос 2 из 20
Какой контрпример точнее всего показывает границу «Сохранение cause и контекста»?
Вопрос 3 из 20
Что появится в выводе примера «Значение выражения try»?
Kotlintry-выражение · Значение выражения try
// Проследите фактическое выполнение без изменения кода.
fun parse(s: String): Int = try {
    s.toInt()
} catch (_: NumberFormatException) {
    -1
}

fun main() = println(parse("12x"))
Вопрос 4 из 20
Почему пример «Исключение с контекстом» даёт именно такой результат?
KotlinПользовательские исключения · Исключение с контекстом
// На ревью требуется объяснить причину поведения.
class InvalidAge(val supplied: Int) : IllegalArgumentException("age=$supplied")
fun register(age: Int) {
    if (age !in 0..130) throw InvalidAge(age)
}
fun main() {
    try { register(200) } catch (e: InvalidAge) { println(e.supplied) }
}
Вопрос 5 из 20
Для «Сохранение cause и контекста» предлагают правку: Указать операцию и безопасный идентификатор ресурса, передать `cause`, а журналировать один раз там, где принято окончательное решение. Какой компромисс нельзя пропустить?
Вопрос 6 из 20
Какое правило определяет поведение фрагмента «Значение выражения try»?
Kotlintry-выражение · Значение выражения try
// На ревью требуется объяснить причину поведения.
fun parse(s: String): Int = try {
    s.toInt()
} catch (_: NumberFormatException) {
    -1
}

fun main() = println(parse("12x"))
Вопрос 7 из 20
Какую точечную правку стоит принять на ревью фрагмента «Исключение с контекстом»?
KotlinПользовательские исключения · Исключение с контекстом
// Сохраните назначение фрагмента, но укрепите его контракт.
class InvalidAge(val supplied: Int) : IllegalArgumentException("age=$supplied")
fun register(age: Int) {
    if (age !in 0..130) throw InvalidAge(age)
}
fun main() {
    try { register(200) } catch (e: InvalidAge) { println(e.supplied) }
}
Вопрос 8 из 20
Где поведение «Цепочка Result» требует отдельной проверки?
Вопрос 9 из 20
Что изменить в «Значение выражения try», чтобы скрытое допущение стало явным контрактом?
Kotlintry-выражение · Значение выражения try
// Сохраните назначение фрагмента, но укрепите его контракт.
fun parse(s: String): Int = try {
    s.toInt()
} catch (_: NumberFormatException) {
    -1
}

fun main() = println(parse("12x"))
Вопрос 10 из 20
Где упрощённое объяснение «Исключение с контекстом» перестаёт работать?
Вопрос 11 из 20
Какой риск не исчезает после правки «Цепочка Result»: Обрабатывать ожидаемые ошибки близко к границе и не заворачивать большие блоки, где можно случайно скрыть дефект программирования?
Вопрос 12 из 20
Что важного сохраняет такая повторная упаковка ошибки?
KotlinКонтекст ошибки · Сохранение cause и контекста
// Проследите фактическое выполнение без изменения кода.
fun load(path: String): String = try {
    java.io.File(path).readText()
} catch (e: java.io.IOException) {
    throw IllegalStateException("Не удалось прочитать $path", e)
}
Вопрос 13 из 20
Какой риск не исчезает после правки «Исключение с контекстом»: Передавать исходную причину в `cause`, не терять значимые поля и не использовать исключения как перечень обычных состояний?
Вопрос 14 из 20
Каков результат?
KotlinОбработка через runCatching · Цепочка Result
// Проследите фактическое выполнение без изменения кода.
fun main() {
    val result = runCatching { "7x".toInt() }
        .map { it * 2 }
        .getOrElse { -1 }
    println(result)
}
Вопрос 15 из 20
Какое правило определяет поведение фрагмента «Сохранение cause и контекста»?
KotlinКонтекст ошибки · Сохранение cause и контекста
// На ревью требуется объяснить причину поведения.
fun load(path: String): String = try {
    java.io.File(path).readText()
} catch (e: java.io.IOException) {
    throw IllegalStateException("Не удалось прочитать $path", e)
}
Вопрос 16 из 20
На каком входе или состоянии граница «Значение выражения try» становится заметной?
Вопрос 17 из 20
Какой принцип лежит в основе поведения «Цепочка Result»?
KotlinОбработка через runCatching · Цепочка Result
// На ревью требуется объяснить причину поведения.
fun main() {
    val result = runCatching { "7x".toInt() }
        .map { it * 2 }
        .getOrElse { -1 }
    println(result)
}
Вопрос 18 из 20
Что изменить в «Сохранение cause и контекста», чтобы скрытое допущение стало явным контрактом?
KotlinКонтекст ошибки · Сохранение cause и контекста
// Сохраните назначение фрагмента, но укрепите его контракт.
fun load(path: String): String = try {
    java.io.File(path).readText()
} catch (e: java.io.IOException) {
    throw IllegalStateException("Не удалось прочитать $path", e)
}
Вопрос 19 из 20
Решение для «Значение выражения try»: Не кодировать ожидаемую ошибку произвольным числом, а вернуть nullable или предметный результат с причиной. Что в нём остаётся не бесплатным?
Вопрос 20 из 20
Что выведет фрагмент «Исключение с контекстом»?
KotlinПользовательские исключения · Исключение с контекстом
// Проследите фактическое выполнение без изменения кода.
class InvalidAge(val supplied: Int) : IllegalArgumentException("age=$supplied")
fun register(age: Int) {
    if (age !in 0..130) throw InvalidAge(age)
}
fun main() {
    try { register(200) } catch (e: InvalidAge) { println(e.supplied) }
}

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

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

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

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