💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. В каждом задании верен только один вариант. После завершения будут показаны общий результат и 4 тематических шкал.
Вопрос 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) }
}
Передать ответственность владельцу вызова, предполагая, что будет напечатано сообщение `age=200`, а не число, независимо от тела catch.
Обернуть операцию проверкой и не менять основной контракт: Код не компилируется: классы исключений не могут иметь свойства.
Оставить структуру прежней, документировав утверждение: Исключение не будет перехвачено, так как базовый класс IllegalArgumentException.
Передавать исходную причину в `cause`, не терять значимые поля и не использовать исключения как перечень обычных состояний.
Вынести участок в отдельный метод, считая верным следующее: Она напечатает `0`, потому что свойства исключения не сохраняются после throw.
Вопрос 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)
}
Вынести участок в отдельный метод, считая верным следующее: Она удаляет исходную трассировку, чтобы сообщение стало короче.
Оставить структуру прежней, документировав утверждение: Она гарантирует повторное чтение файла после создания IllegalStateException.
Обернуть операцию проверкой и не менять основной контракт: Она делает исключение проверяемым компилятором Kotlin.
Указать операцию и безопасный идентификатор ресурса, передать `cause`, а журналировать один раз там, где принято окончательное решение.
Перенести проверку в вызывающий код, исходя из того, что она превращает ошибку ввода-вывода в успешное пустое значение.