Dart:
Fouten afhandelen

Hoe doe je dat:

Dart ondersteunt twee soorten fouten: compileertijd fouten en looptijd fouten. Compileertijd fouten worden gedetecteerd door de Dart-analyzer voordat de code wordt uitgevoerd, terwijl looptijd fouten, of uitzonderingen, optreden tijdens de uitvoering. Hier is hoe je uitzonderingen in Dart afhandelt:

Probeer-Vang

Gebruik try-catch om uitzonderingen te vangen en te voorkomen dat ze je applicatie laten crashen:

try {
  var resultaat = 100 ~/ 0; // Poging tot delen door nul, veroorzaakt een uitzondering
} catch (e) {
  print('Een uitzondering gevangen: $e'); // Handelt de uitzondering af
}

Voorbeelduitvoer: Een uitzondering gevangen: IntegerDivisionByZeroException

Specifieke Uitzondering

Om specifieke uitzonderingen af te handelen, vermeld je de uitzondering na catch:

try {
  var resultaat = 100 ~/ 0;
} on IntegerDivisionByZeroException {
  print('Kan niet delen door nul.'); // Handelt specifiek het delen door nul uitzonderingen af
}

Voorbeelduitvoer: Kan niet delen door nul.

Stack Trace

Om een stack trace te krijgen voor debuggen, gebruik je een tweede parameter in het catch-blok:

try {
  var resultaat = 100 ~/ 0;
} catch (e, s) {
  print('Uitzondering: $e');
  print('Stack trace: $s'); // Print stack trace voor debuggen
}

Tot Slot

Gebruik finally om code uit te voeren na try/catch, ongeacht of er een uitzondering was:

try {
  var resultaat = 100 ~/ 0;
} catch (e) {
  print('Een uitzondering gevangen: $e');
} finally {
  print('Dit wordt altijd uitgevoerd.'); // Opruimcode of laatste stappen
}

Voorbeelduitvoer:

Een uitzondering gevangen: IntegerDivisionByZeroException
Dit wordt altijd uitgevoerd.

Bibliotheken van Derden

Hoewel de kernbibliotheek van Dart robuust is voor foutafhandeling, kun je ook gebruikmaken van pakketten van derden zoals dartz voor functioneel programmeren die concepten introduceert zoals Either en Option die kunnen worden gebruikt voor foutafhandeling. Hier is een voorbeeld van het gebruik van dartz voor foutafhandeling:

  1. Voeg dartz toe aan je pubspec.yaml bestand onder afhankelijkheden:
dependencies:
  dartz: ^0.10.0
  1. Gebruik Either om fouten op een elegante manier af te handelen in je Dart-code:
import 'package:dartz/dartz.dart';

Either<String, int> delen(int dividend, int deler) {
  if (deler == 0) {
    return Left('Kan niet delen door nul.');
  } else {
    return Right(dividend ~/ deler);
  }
}

void main() {
  final resultaat = delen(100, 0);
  resultaat.fold(
    (links) => print('Fout: $links'), 
    (rechts) => print('Resultaat: $rechts')
  );
}

Voorbeelduitvoer: Fout: Kan niet delen door nul.

Het Left deel vertegenwoordigt meestal de fout, en het Right deel vertegenwoordigt succes. Dit patroon maakt het mogelijk fouten op een functionelere manier af te handelen, en biedt duidelijkheid en controle over foutbeheer.