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 для обробки помилок:

  1. Додайте dartz до вашого файлу pubspec.yaml у залежностях:
dependencies:
  dartz: ^0.10.0
  1. Використовуйте 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 представляє успіх. Цей шаблон дозволяє обробляти помилки більш функціональним способом, пропонуючи ясність та контроль над управлінням помилок.