Задачи на исключения в Dart. Часть 3
Сделайте функцию readFileSafe с обработкой IO-ошибок при чтении файла.
Сделайте wrapper tryOperation для логирования ошибок: принимает void Function(), ловит любое исключение и печатает его.
Используйте try/catch с возвратом nullable-значения: при ошибке парсинга верните null.
Сделайте custom ValidationException с полем message.
Сделайте функцию parseEmail с проверкой через ArgumentError, если строка не содержит '@'.
Сделайте async-функцию, которая внутри await вызывает падающий Future. Оберните вызов в try/catch и выведите текст ошибки. Покажите, что await позволяет ловить ошибки Future обычным try/catch.
Future<int> failing() async {
await Future.delayed(Duration(milliseconds: 100));
throw Exception('сбой сети');
}
Сделайте функцию chainOperations с обработкой ошибок: последовательно выполните три шага, при ошибке на любом шаге прервите цепочку и верните сообщение.
Сделайте generic-wrapper Result<T> с вариантами успеха и ошибки. Добавьте функцию Result<T> runCatching<T>(T Function() block), которая выполняет block и при исключении возвращает ошибку вместо throw.
// пример использования:
// final result = runCatching(() => int.parse('abc'));
Сделайте комплексную задачу с try/catch/finally: откройте «ресурс», выполните работу, обработайте ошибку и гарантированно закройте ресурс в finally.
Объясните, когда не нужно использовать exceptions (например, ожидаемые бизнес-ошибки лучше моделировать через Result или nullable-возврат).