Dart:
Обробка помилок
Як:
Dart підтримує два типи помилок: помилки часу компіляції та помилки часу виконання. Помилки часу компіляції виявляються аналізатором Dart перед виконанням коду, тоді як помилки часу виконання або виключення виникають під час виконання. Ось як ви обробляєте виключення в Dart:
Try-Catch
Використовуйте try-catch
для захоплення виключень та запобігання їх впливу на ваше застосування:
try {
var result = 100 ~/ 0; // Спроба поділу на нуль, створює виключення
} catch (e) {
print('Caught an exception: $e'); // Обробляє виключення
}
Приклад виводу: Caught an exception: IntegerDivisionByZeroException
Специфічне виключення
Щоб обробляти специфічні виключення, вказуйте виключення після catch
:
try {
var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
print('Неможливо поділити на нуль.'); // Спеціально обробляє помилки поділу на нуль
}
Приклад виводу: Неможливо поділити на нуль.
Стек викликів
Щоб отримати стек викликів для налагодження, використовуйте другий параметр у блоку catch:
try {
var result = 100 ~/ 0;
} catch (e, s) {
print('Exception: $e');
print('Stack trace: $s'); // Роздруковує стек викликів для налагодження
}
Finally
Використовуйте finally
для виконання коду після try/catch, незалежно від того, чи було викинуто виключення:
try {
var result = 100 ~/ 0;
} catch (e) {
print('Caught an exception: $e');
} finally {
print('Це завжди виконується.'); // Код очищення або остаточні кроки
}
Приклад виводу:
Caught an exception: IntegerDivisionByZeroException
Це завжди виконується.
Бібліотеки третіх сторін
Хоча основна бібліотека Dart є потужною для обробки помилок, ви також можете використовувати сторонні пакети, такі як dartz
для функціонального програмування, які вводять поняття, такі як Either
і Option
, які можна використовувати для обробки помилок. Ось приклад використання dartz
для обробки помилок:
- Додайте
dartz
до вашого файлуpubspec.yaml
у залежностях:
dependencies:
dartz: ^0.10.0
- Використовуйте
Either
для граційної обробки помилок у вашому коді Dart:
import 'package:dartz/dartz.dart';
Either<String, int> divide(int dividend, int divisor) {
if (divisor == 0) {
return Left('Неможливо поділити на нуль.');
} else {
return Right(dividend ~/ divisor);
}
}
void main() {
final result = divide(100, 0);
result.fold(
(left) => print('Помилка: $left'),
(right) => print('Результат: $right')
);
}
Приклад виводу: Помилка: Неможливо поділити на нуль.
Частина Left
зазвичай представляє помилку, а частина Right
представляє успіх. Цей шаблон дозволяє обробляти помилки більш функціональним способом, пропонуючи ясність та контроль над управлінням помилок.