Функция с исключением в Dart
Правила для параметров часто удобно держать внутри функции. Если значение не подходит, функция сообщает об этом исключением, а вызывающий код решает, что показать пользователю.
Функция возвращает элемент списка по индексу
только для неотрицательного индекса. Иначе -
ArgumentError:
int getAt(List<int> list, int index) {
if (index < 0) {
throw ArgumentError("negative index");
}
return list[index];
}
Вызов оборачивают в защищенный блок, чтобы отловить и неверный аргумент, и выход за границы списка:
var data = [10, 20, 30];
try {
print(getAt(data, -1));
} on ArgumentError catch (e) {
print("bad arg");
} on RangeError catch (e) {
print("out of list");
}
Та же схема работает для проверки диапазона
возраста или процента. Несколько блоков
catch подряд позволяют развести сообщения
для разных типов сбоя в одном месте вызова:
void percent(int value) {
if (value < 0 || value > 100) {
throw ArgumentError("out of range");
}
print("$value%");
}
try {
percent(150);
} on ArgumentError catch (e) {
print("invalid percent");
}
Создайте функцию ensureNonNegative с
параметром n. Для n < 0
создайте ArgumentError с сообщением
"negative". Иначе верните n.
Создайте функцию divide с двумя
целыми параметрами. При нулевом делителе
создайте UnsupportedError.
Иначе верните частное. Вызовите ее с нулевым
делителем и выведите "fail" при ошибке.
Создайте функцию charAtSafe со строкой
и индексом. При отрицательном индексе
создайте ArgumentError. Иначе верните
символ строки. Обработайте слишком большой
индекс через RangeError.