Выбрасывание исключения в Dart
Оператор throw создает исключение и
немедленно прерывает текущий участок кода.
Управление ищет подходящий catch выше
по стеку вызовов. Если его нет, программа
завершается с сообщением об ошибке.
throw ArgumentError("message");
В учебных задачах удобно создавать готовые
типы платформы. Исключение ArgumentError
подходит, когда параметр нарушает правило:
void requireEven(int n) {
if (n % 2 != 0) {
throw ArgumentError("even only");
}
print(n);
}
try {
requireEven(3);
} on ArgumentError catch (e) {
print("rejected");
}
Исключение UnsupportedError
можно создать явно, если деление на ноль
проверяют вручную до оператора ~/:
int safeDiv(int a, int b) {
if (b == 0) {
throw UnsupportedError('division by zero');
}
return a ~/ b;
}
try {
print(safeDiv(8, 0));
} on UnsupportedError catch (e) {
print("cannot divide");
}
Текст ошибки доступен через e.toString()
в блоке catch. Сообщения в коде пишите
на английском, как и имена переменных.
Иногда сбой обрабатывают частично и передают
дальше. Команда rethrow повторно
отправляет то же исключение из текущего
catch:
try {
print(int.parse("x"));
} on FormatException catch (e) {
print("logged");
rethrow;
}
После rethrow код ниже в этом catch
не выполняется. Если выше нет другого
обработчика, программа остановится, как
без перехвата.
Создайте функцию printIfPositive с
параметром n. Для n <= 0
создайте ArgumentError с сообщением
"not positive". Иначе выведите n.
Вызовите функцию printIfPositive
с отрицательным числом внутри защищенного
блока. При ArgumentError выведите
текст из объекта исключения.