Dart:
Fehlerbehandlung
Wie man:
Dart unterstützt zwei Arten von Fehlern: Kompilierzeit-Fehler und Laufzeit-Fehler. Kompilierzeitfehler werden vom Dart-Analyzer erkannt, bevor der Code ausgeführt wird, während Laufzeitfehler oder Ausnahmen während der Ausführung auftreten. So gehst du mit Ausnahmen in Dart um:
Try-Catch
Verwende try-catch
, um Ausnahmen zu erfassen und zu verhindern, dass sie deine Anwendung abstürzen lassen:
try {
var result = 100 ~/ 0; // Versuch der Division durch Null, löst eine Ausnahme aus
} catch (e) {
print('Eine Ausnahme gefangen: $e'); // Behandelt die Ausnahme
}
Beispielausgabe: Eine Ausnahme gefangen: IntegerDivisionByZeroException
Spezifische Ausnahme
Um spezifische Ausnahmen zu behandeln, nenne die Ausnahme nach catch
:
try {
var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
print('Kann nicht durch Null teilen.'); // Behandelt spezifisch die Division-durch-Null-Ausnahmen
}
Beispielausgabe: Kann nicht durch Null teilen.
Stack Trace
Um einen Stack Trace zur Fehlersuche zu erhalten, verwende einen zweiten Parameter im Catch-Block:
try {
var result = 100 ~/ 0;
} catch (e, s) {
print('Ausnahme: $e');
print('Stack Trace: $s'); // Gibt Stack Trace zur Fehlersuche aus
}
Finally
Verwende finally
, um Code nach try/catch auszuführen, unabhängig davon, ob eine Ausnahme geworfen wurde:
try {
var result = 100 ~/ 0;
} catch (e) {
print('Eine Ausnahme gefangen: $e');
} finally {
print('Das wird immer ausgeführt.'); // Aufräumcode oder finale Schritte
}
Beispielausgabe:
Eine Ausnahme gefangen: IntegerDivisionByZeroException
Das wird immer ausgeführt.
Drittanbieter-Bibliotheken
Obwohl Dart’s Kernbibliothek robust für die Fehlerbehandlung ist, kannst du auch Drittanbieter-Pakete wie dartz
für funktionale Programmierung verwenden, die Konzepte wie Either
und Option
einführen, die für die Fehlerbehandlung verwendet werden können. Hier ist ein Beispiel, wie man dartz
für die Fehlerbehandlung verwendet:
- Füge
dartz
zu deinerpubspec.yaml
-Datei unter den Abhängigkeiten hinzu:
dependencies:
dartz: ^0.10.0
- Verwende
Either
für eine elegante Fehlerbehandlung in deinem Dart-Code:
import 'package:dartz/dartz.dart';
Either<String, int> divide(int Dividende, int Divisor) {
if (Divisor == 0) {
return Left('Kann nicht durch Null teilen.');
} else {
return Right(Dividende ~/ Divisor);
}
}
void main() {
final result = divide(100, 0);
result.fold(
(left) => print('Fehler: $left'),
(right) => print('Ergebnis: $right')
);
}
Beispielausgabe: Fehler: Kann nicht durch Null teilen.
Der Left
-Teil repräsentiert normalerweise den Fehler, und der Right
-Teil repräsentiert den Erfolg. Dieses Muster ermöglicht eine Fehlerbehandlung auf funktionale Weise und bietet Klarheit und Kontrolle über das Fehlermanagement.