Освоение пользовательских исключений в Dart: обработка ошибок стала проще

Обработка ошибок — важнейший аспект разработки программного обеспечения, гарантирующий корректную реакцию наших программ на непредвиденные ситуации. В Dart исключения предоставляют мощный механизм обработки ошибок. Хотя Dart предоставляет встроенные классы исключений, существуют сценарии, в которых создание пользовательских исключений может значительно улучшить читаемость и удобство обслуживания кода. В этой статье мы рассмотрим различные методы создания и использования пользовательских исключений в Dart, предоставив вам подробное руководство по освоению обработки ошибок в ваших приложениях Dart.

  1. Расширение класса исключений.
    Самый простой способ создать собственное исключение в Dart — расширить встроенный класс Exception. Этот подход позволяет вам определить собственный тип исключения с осмысленным именем, отражающим конкретную ошибку или исключительное состояние, которое вы хотите обработать.
class CustomException extends Exception {
  final String message;
  CustomException(this.message);
  @override
  String toString() => 'CustomException: $message';
}
void main() {
  try {
    throw CustomException('Something went wrong!');
  } catch (e) {
    print(e); // Output: CustomException: Something went wrong!
  }
}
  1. Добавление настраиваемых свойств и методов.
    В дополнение к сообщению об исключении вы можете включить настраиваемые свойства и методы в свой собственный класс исключений. Это позволяет вам предоставить дополнительный контекст или поведение, специфичное для исключения.
class CustomException extends Exception {
  final String message;
  final int errorCode;
  CustomException(this.message, this.errorCode);
  String getFullErrorMessage() {
    return 'Error [$errorCode]: $message';
  }
}
void main() {
  try {
    throw CustomException('Invalid input', 42);
  } catch (e) {
    if (e is CustomException) {
      print(e.getFullErrorMessage()); // Output: Error [42]: Invalid input
    }
  }
}
  1. Организация исключений в иерархии.
    При работе со сложными приложениями организация исключений в иерархии может обеспечить структурированный подход к обработке ошибок. Вы можете создать базовый класс исключений и получить от него определенные типы исключений.
class BaseException implements Exception {
  final String message;
  BaseException(this.message);
  @override
  String toString() => 'BaseException: $message';
}
class CustomException extends BaseException {
  final int errorCode;
  CustomException(this.errorCode, String message) : super(message);
  @override
  String toString() => 'CustomException [$errorCode]: $message';
}
void main() {
  try {
    throw CustomException(404, 'Resource not found');
  } catch (e) {
    print(e); // Output: CustomException [404]: Resource not found
  }
}
  1. Отслеживание определенных пользовательских исключений.
    Для обработки определенных типов исключений вы можете использовать несколько блоков catch. Это позволяет вам использовать различную логику обработки ошибок в зависимости от конкретного типа исключения.
void main() {
  try {
    throw CustomException('Something went wrong!');
  } on CustomException catch (e) {
    print('CustomException occurred: ${e.message}');
  } on Exception catch (e) {
    print('Exception occurred: ${e.toString()}');
  }
}

Используя пользовательские исключения в Dart, вы можете повысить ясность и удобство обслуживания вашего кода, обеспечивая при этом надежный механизм обработки ошибок. Мы изучили различные методы создания пользовательских исключений, включая расширение класса Exception, добавление пользовательских свойств и методов, организацию исключений в иерархии и перехват определенных пользовательских исключений. Имея в своем распоряжении эти методы, вы будете готовы эффективно обрабатывать ошибки в своих приложениях Dart.