Блок finally в Dart
Иногда нужно выполнить код и при успехе, и при
ошибке: вывести итог, сбросить флаг, напечатать
разделитель. Для этого после catch
добавляют блок finally. Он запускается
всегда, когда завершилась пара try-catch.
Запишем общий вид конструкции:
try {
// risky code
} on SomeException catch (e) {
// handle
} finally {
// always runs
}
Обратимся к несуществующему индексу списка
и в finally выведем количество элементов:
var nums = [10, 20, 30];
try {
print(nums[9]);
} on RangeError catch (e) {
print("bad index");
} finally {
print(nums.length);
}
Если исключения не было, catch пропускается,
но finally все равно выполнится:
var nums = [4, 5, 6];
try {
print(nums[0]);
} on RangeError catch (e) {
print("bad index");
} finally {
print("end");
}
Блок finally может стоять и без catch,
если исключение уходит выше, но завершающий
шаг все равно нужен. В учебных задачах чаще
используют полную форму try-catch-finally.
Даны a и b. Выведите результат
a ~/ b. При делении на ноль выведите
"error". В конце в любом случае выведите
"finished".
Дана строка line. Выведите число из
int.parse(line). При FormatException
выведите "nan". Затем в любом случае
выведите длину строки line.