Dart:
Håndtering av feil
Hvordan:
Dart støtter to typer feil: kompileringstid-feil og kjøretid-feil. Kompileringstid-feil oppdages av Dart-analysatoren før koden kjører, mens kjøretid-feil, eller unntak, oppstår under utførelse. Slik håndterer du unntak i Dart:
Try-Catch
Bruk try-catch
for å fange opp unntak og forhindre at de krasjer applikasjonen din:
try {
var result = 100 ~/ 0; // Forsøker divisjon med null, kaster et unntak
} catch (e) {
print('Fanget et unntak: $e'); // Håndterer unntaket
}
Eksempelutskrift: Fanget et unntak: IntegerDivisionByZeroException
Spesifikt Unntak
For å håndtere spesifikke unntak, nevn unntaket etter catch
:
try {
var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
print('Kan ikke dele på null.'); // Håndterer spesifikt deling med null-unntak
}
Eksempelutskrift: Kan ikke dele på null.
Stakksporing
For å få en stakksporing for feilsøking, bruk en andre parameter i catch-blokken:
try {
var result = 100 ~/ 0;
} catch (e, s) {
print('Unntak: $e');
print('Stakksporing: $s'); // Skriver ut stakksporing for feilsøking
}
Til slutt
Bruk finally
for å utføre kode etter try/catch, uavhengig av om et unntak ble kastet:
try {
var result = 100 ~/ 0;
} catch (e) {
print('Fanget et unntak: $e');
} finally {
print('Dette blir alltid utført.'); // Oppryddingskode eller siste steg
}
Eksempelutskrift:
Fanget et unntak: IntegerDivisionByZeroException
Dette blir alltid utført.
Tredjepartsbiblioteker
Selv om Darts kjernelibrary er robust for feilhåndtering, kan du også bruke tredjepartspakker som dartz
for funksjonell programmering som innfører konsepter som Either
og Option
som kan brukes for feilhåndtering. Her er et eksempel på bruk av dartz
for feilhåndtering:
- Legg
dartz
til dinpubspec.yaml
-fil under avhengigheter:
dependencies:
dartz: ^0.10.0
- Bruk
Either
for å håndtere feil på en nådig måte i Dart-koden din:
import 'package:dartz/dartz.dart';
Either<String, int> divide(int dividend, int divisor) {
if (divisor == 0) {
return Left('Kan ikke dele på null.');
} else {
return Right(dividend ~/ divisor);
}
}
void main() {
final result = divide(100, 0);
result.fold(
(left) => print('Feil: $left'),
(right) => print('Resultat: $right')
);
}
Eksempelutskrift: Feil: Kan ikke dele på null.
Left
-delen representerer vanligvis feilen, og Right
-delen representerer suksess. Dette mønsteret tillater håndtering av feil på en mer funksjonell måte, og tilbyr klarhet og kontroll over feilhåndtering.