0Pricing
Dart Academy · Урок

Пользовательские исключения и rethrow

Определение понятных ошибок и их повторный выброс

«Пользовательские исключения и rethrow» — бесплатный урок Dart Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.

Осмысленные ошибки

Общие исключения скрывают намерение. Пользовательское исключение называет точную проблему, поэтому сбои легко понять во всём приложении. 🏷️

Реализация типа исключения

Создайте класс, который реализует тип исключения. Благодаря этому Dart и читатели сразу распознают его как тип ошибки, который можно выбросить.

class PaymentException implements Exception {}

Хранение сообщения

Передавайте исключению поле сообщения через конструктор, чтобы обработчики могли понять причину произошедшего.

class PaymentException implements Exception {
  final String message;
  PaymentException(this.message);
}

Понятный toString

Переопределите toString, чтобы при выводе исключения отображалось понятное предложение, а не только имя класса.

@override
String toString() => 'PaymentException: $message';

Создание собственного исключения

Пользовательское исключение выбрасывается так же, как встроенное. Создавайте новый экземпляр, когда нарушено правило.

throw PaymentException('Card declined');

Перехват по собственному типу

Перехватывайте своё исключение по условию типа, как и встроенные типы, чтобы обрабатывать именно этот случай.

try {
  pay();
} on PaymentException catch (e) {
  print(e);
}

Иногда исправить невозможно

Обработчик может записать ошибку в журнал, но не иметь возможности устранить её. Вместо того чтобы скрывать ошибку, можно передать её дальше повторным выбросом.

Ключевое слово повторного выброса

Повторный выброс снова выбрасывает текущее исключение и сохраняет исходную трассировку стека, поэтому вызывающий код видит, где оно действительно возникло.

catch (e) {
  log(e);
  rethrow;
}

Повторный выброс лучше явного выброса

Явный выброс исключения заново сбрасывает трассировку стека, а повторный выброс сохраняет её. При повторном выбросе внутри блока перехвата всегда выбирайте повторный выброс.

Запишите в журнал и передайте выше

Распространённый шаблон: перехватить ошибку, записать её в журнал, а затем передать выше, чтобы более высокий уровень решил, как восстановиться.

catch (e) {
  logger.error(e);
  rethrow;
}

Добавление полезных полей

Пользовательские исключения могут хранить дополнительные данные, например код или значение, вызвавшее сбой, чтобы обработчики получили больше контекста для действий.

class ApiException implements Exception {
  final int code;
  ApiException(this.code);
}

Быстрая проверка

Зачем при перехвате использовать повторный выброс вместо явного выброса исключения заново?

Итоги

Теперь Вы умеете создавать осмысленные исключения, которые реализуют тип исключения, хранят данные и с помощью повторного выброса аккуратно передают сбои выше. 🚀

Часто задаваемые вопросы

Урок «Пользовательские исключения и rethrow» бесплатный?

Да — полный текст урока «Пользовательские исключения и rethrow» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.

Чему я научусь в уроке «Пользовательские исключения и rethrow»?

Определение понятных ошибок и их повторный выброс Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Dart Academy?

Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Пользовательские исключения и rethrow»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Dart Academy?

Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. throw, try и catch
  2. Конструкции on и типы исключений
  3. finally и гарантированная очистка
  4. Пользовательские исключения и rethrow
← Назад к Dart Academy