💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 17 из 20
Что здесь следует считать правилом «Границы перехвата», а что — лишь деталью текущей реализации?
Dart Dart · Границы перехвата · семантика Копировать
Future<Result> checkout() async {
try {
return await gateway.charge();
} on TimeoutException catch (e, st) {
throw PaymentUnavailable(cause: e, stackTrace: st);
}
}
// Контекст задания: проверка семантики фрагмента.
Спорный результат «Границы перехвата» должен разбирать вызывающий код, поскольку компонент отвечает лишь за обычный путь. Различия между версиями SDK для «Границы перехвата» в этом выводе не учитываются.
Случай «обработка на уровне без возможности восстановиться» объявить внутренней деталью «Границы перехвата», даже если клиент видит иной результат.
Для «Границы перехвата» считать случаи «слишком ранний перехват, пустой `catch`, повторное выбрасывание без `rethrow`; обработка на уровне без возможности восстановиться» эквивалентными, если программа не завершается аварийно.
Порядок внутренних вызовов «Границы перехвата» считать публичной гарантией, которую нельзя менять при рефакторинге. Вывод делают по поведению текущей реализации «Границы перехвата» на обычном входе.
Перехватывать ошибку следует на уровне, который способен добавить контекст, восстановиться или преобразовать её; пустой широкий `catch` теряет причину и оставляет систему в неопределённом состоянии.
Вопрос 18 из 20
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Границы перехвата»?
Dart Dart · Границы перехвата · границы Копировать
Future<Result> checkout() async {
try {
return await gateway.charge();
} on TimeoutException catch (e, st) {
throw PaymentUnavailable(cause: e, stackTrace: st);
}
}
// Контекст задания: анализ граничных входов.
Составить отдельные сценарии для границ: слишком ранний перехват, пустой `catch`, повторное выбрасывание без `rethrow`; обработка на уровне без возможности восстановиться.
Проверить для «Границы перехвата» только самый сложный случай «обработка на уровне без возможности восстановиться», считая остальные границы косвенно покрытыми.
Во всех спорных входах «Границы перехвата» проверять только отсутствие необработанного исключения, не сравнивая состояние. Команда предполагает, что остальные входы «Границы перехвата» проходят по той же ветви.
Автоматизировать обычный путь «Границы перехвата», а случай «обработка на уровне без возможности восстановиться» оставить в ручном чек-листе выпуска.
Для «Границы перехвата» ограничиться случаем «слишком ранний перехват», а остальные входы считать тем же классом отказа. Так набор «Границы перехвата» выглядит компактнее и требует меньше поддержки.