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

Исключения и обработка ошибок

Тест по теме «Исключения и обработка ошибок» охватывает «Выбрасывание исключений», «Обработка и завершение после ошибок», «Собственные исключения» и «Границы перехвата». В 20 вопросах нужно читать код, различать граничные случаи, выбирать место исправления, формулировать внешний договор и проектировать регрессионную проверку. Заданий с фрагментами кода — 12; в каждом вопросе один правильный ответ из пяти.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. В заданиях с кодом опирайтесь на показанный фрагмент и наблюдаемое поведение; в ситуационных — на публичный договор и последствия решения.
Вопрос 1 из 20
Какое утверждение корректно связывает показанный код с семантикой темы «Выбрасывание исключений»?
DartDart · Выбрасывание исключений · семантика
Never fail(String field, Object? value) {
  throw FormatException('Invalid $field: $value');
}
int parsePort(String text) {
  final value = int.tryParse(text);
  return value == null || value <= 0 ? fail('port', text) : value;
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 2 из 20
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Выбрасывание исключений»?
DartDart · Выбрасывание исключений · исправление
Never fail(String field, Object? value) {
  throw FormatException('Invalid $field: $value');
}
int parsePort(String text) {
  final value = int.tryParse(text);
  return value == null || value <= 0 ? fail('port', text) : value;
}

// Контекст задания: выбор места исправления.
Вопрос 3 из 20
После одного успешного запуска фрагмент признали готовым. Какой набор случаев по теме «Выбрасывание исключений» всё ещё нужно проверить раздельно?
DartDart · Выбрасывание исключений · границы
Never fail(String field, Object? value) {
  throw FormatException('Invalid $field: $value');
}
int parsePort(String text) {
  final value = int.tryParse(text);
  return value == null || value <= 0 ? fail('port', text) : value;
}

// Контекст задания: анализ граничных входов.
Вопрос 4 из 20
Как сформулировать публичное обещание темы «Выбрасывание исключений», не привязывая клиента к конкретному классу?
Вопрос 5 из 20
Перед обновлением зависимости нужно защитить исправление «Выбрасывание исключений». Какая проверка подходит лучше всего?
Вопрос 6 из 20
Какой тезис о коде «Обработка и завершение после ошибок» можно защитить без ссылки на удачный тестовый запуск?
DartDart · Обработка и завершение после ошибок · семантика
Future<void> save() async {
  final file = await openFile();
  try {
    await file.write();
  } on FileSystemException catch (e, st) {
    log(e, st);
    rethrow;
  } finally {
    await file.close();
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 7 из 20
Команда хочет сократить набор проверок для «Обработка и завершение после ошибок» до одного сценария. Какой вариант сохраняет важные различия?
DartDart · Обработка и завершение после ошибок · границы
Future<void> save() async {
  final file = await openFile();
  try {
    await file.write();
  } on FileSystemException catch (e, st) {
    log(e, st);
    rethrow;
  } finally {
    await file.close();
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 8 из 20
В показанном решении проблему обходят рядом с одним вызовом. Какое изменение исправляет саму границу темы «Обработка и завершение после ошибок»?
DartDart · Обработка и завершение после ошибок · исправление
Future<void> save() async {
  final file = await openFile();
  try {
    await file.write();
  } on FileSystemException catch (e, st) {
    log(e, st);
    rethrow;
  } finally {
    await file.close();
  }
}

// Контекст задания: выбор места исправления.
Вопрос 9 из 20
Ручная проверка по теме «Обработка и завершение после ошибок» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 10 из 20
Как сформулировать публичное обещание темы «Обработка и завершение после ошибок», не привязывая клиента к конкретному классу?
Вопрос 11 из 20
Несколько мест использования повторяют одну и ту же защиту. Какая правка должна стать единой для темы «Собственные исключения»?
DartDart · Собственные исключения · исправление
final class InvalidOrder implements Exception {
  InvalidOrder(this.orderId, this.reason);
  final String orderId;
  final String reason;
  @override String toString() => 'InvalidOrder($orderId, $reason)';
}

// Контекст задания: выбор места исправления.
Вопрос 12 из 20
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Собственные исключения»?
DartDart · Собственные исключения · границы
final class InvalidOrder implements Exception {
  InvalidOrder(this.orderId, this.reason);
  final String orderId;
  final String reason;
  @override String toString() => 'InvalidOrder($orderId, $reason)';
}

// Контекст задания: анализ граничных входов.
Вопрос 13 из 20
Какое утверждение корректно связывает показанный код с семантикой темы «Собственные исключения»?
DartDart · Собственные исключения · семантика
final class InvalidOrder implements Exception {
  InvalidOrder(this.orderId, this.reason);
  final String orderId;
  final String reason;
  @override String toString() => 'InvalidOrder($orderId, $reason)';
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 14 из 20
Две реализации решают задачу «Собственные исключения» по-разному. Какое требование делает их взаимозаменяемыми для клиента?
Вопрос 15 из 20
Ручная проверка по теме «Собственные исключения» прошла. Как превратить её в полезную автоматическую регрессию?
Вопрос 16 из 20
Какое изменение показанного кода исправляет правило «Границы перехвата», а не маскирует один его симптом?
DartDart · Границы перехвата · исправление
Future<Result> checkout() async {
  try {
    return await gateway.charge();
  } on TimeoutException catch (e, st) {
    throw PaymentUnavailable(cause: e, stackTrace: st);
  }
}

// Контекст задания: выбор места исправления.
Вопрос 17 из 20
Что здесь следует считать правилом «Границы перехвата», а что — лишь деталью текущей реализации?
DartDart · Границы перехвата · семантика
Future<Result> checkout() async {
  try {
    return await gateway.charge();
  } on TimeoutException catch (e, st) {
    throw PaymentUnavailable(cause: e, stackTrace: st);
  }
}

// Контекст задания: проверка семантики фрагмента.
Вопрос 18 из 20
Код прошёл демонстрационный пример, но границы не разобраны. Что нужно проверить отдельно в теме «Границы перехвата»?
DartDart · Границы перехвата · границы
Future<Result> checkout() async {
  try {
    return await gateway.charge();
  } on TimeoutException catch (e, st) {
    throw PaymentUnavailable(cause: e, stackTrace: st);
  }
}

// Контекст задания: анализ граничных входов.
Вопрос 19 из 20
Какая регрессия для «Границы перехвата» будет падать на старом дефекте и не ломаться от безопасной перестройки кода?
Вопрос 20 из 20
Две реализации решают задачу «Границы перехвата» по-разному. Какое требование делает их взаимозаменяемыми для клиента?

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

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

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

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