Eine Exception auslösen
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 42 von 65.
Manchmal müssen Sie Ihre eigenen Fehlerbedingungen in Ihrem Code erstellen. Das Schlüsselwort throw ermöglicht es Ihnen, manuell eine Ausnahme auszulösen, wenn Ihr Programm auf eine Situation stößt, die nicht fortgesetzt werden darf.
Wenn Sie eine Exception mit throw auslösen, sagen Sie im Grunde: „Stoppt alles – hier stimmt etwas nicht.“ Dies ist nützlich, um Eingaben zu validieren oder Regeln in Ihren Funktionen durchzusetzen. Sie können eine einfache String-Nachricht auslösen oder spezifischere Exception-Typen erstellen.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}In diesem Beispiel wirft die Funktion sofort eine Exception mit einer aussagekräftigen Nachricht, wenn jemand versucht, ein negatives Alter zu übergeben. Dies verhindert, dass der Rest der Funktion mit ungültigen Daten ausgeführt wird, was Ihren Code zuverlässiger und einfacher zu debuggen macht.
Das Auslösen von Exceptions ist besonders wertvoll in Funktionen, die ihre Eingaben validieren müssen, bevor sie mit wichtigen Operationen fortfahren.
Aufgabe
EinfachErstellen Sie ein Programm, das Benutzerkontoinformationen validiert, indem es benutzerdefinierte Validierungsfunktionen implementiert, die Ausnahmen auslösen, wenn ungültige Daten erkannt werden. Ihr Programm sollte mehrere Kontofelder überprüfen und spezifische Fehlermeldungen für verschiedene Validierungsfehler ausgeben.
- Lesen Sie eine String-Eingabe ein, die den Benutzernamen darstellt
- Lesen Sie eine String-Eingabe ein, die die E-Mail-Adresse darstellt
- Lesen Sie eine String-Eingabe ein, die das Alter als String darstellt
- Lesen Sie eine String-Eingabe ein, die das Passwort darstellt
- Erstellen Sie eine Funktion namens
validateUsername, die prüft, ob der Benutzername gültig ist: - Wenn der Benutzername leer ist oder weniger als 3 Zeichen hat, lösen Sie die Ausnahme aus:
"Username must be at least 3 characters long" - Wenn der Benutzername Leerzeichen enthält, lösen Sie die Ausnahme aus:
"Username cannot contain spaces" - Wenn die Validierung erfolgreich ist, geben Sie aus:
"Username validation passed" - Erstellen Sie eine Funktion namens
validateEmail, die prüft, ob die E-Mail gültig ist: - Wenn die E-Mail nicht das
@-Symbol enthält, lösen Sie die Ausnahme aus:"Email must contain @ symbol" - Wenn die E-Mail keinen Punkt
.nach dem@-Symbol enthält, lösen Sie die Ausnahme aus:"Email must contain a valid domain" - Wenn die Validierung erfolgreich ist, geben Sie aus:
"Email validation passed" - Erstellen Sie eine Funktion namens
validateAge, die prüft, ob das Alter gültig ist: - Konvertieren Sie den Alters-String mit
int.parse()in eine Ganzzahl - Wenn das Alter kleiner als 13 ist, lösen Sie die Ausnahme aus:
"Age must be at least 13 years old" - Wenn das Alter größer als 120 ist, lösen Sie die Ausnahme aus:
"Age must be realistic (under 120)" - Wenn die Validierung erfolgreich ist, geben Sie aus:
"Age validation passed" - Erstellen Sie eine Funktion namens
validatePassword, die prüft, ob das Passwort gültig ist: - Wenn das Passwort kürzer als 8 Zeichen ist, lösen Sie die Ausnahme aus:
"Password must be at least 8 characters long" - Wenn die Validierung erfolgreich ist, geben Sie aus:
"Password validation passed" - Rufen Sie jede Validierungsfunktion nacheinander auf und behandeln Sie alle auftretenden Ausnahmen
- Zeigen Sie die Ergebnisse in dem unten gezeigten exakten Format an
Wenn die Eingaben beispielsweise "john", "john@email.com", "25", "password123" sind, sollte Ihr Programm Folgendes ausgeben:
Account Validation System
=========================
Validating username: john
Username validation passed
Validating email: john@email.com
Email validation passed
Validating age: 25
Age validation passed
Validating password: password123
Password validation passed
=========================
All validations passed successfully!
Account created for user: johnWenn die Eingaben "jo", "john@email.com", "25", "password123" sind, sollte Ihr Programm Folgendes ausgeben:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsWenn die Eingaben "john doe", "johnemail.com", "12", "pass" sind, sollte Ihr Programm Folgendes ausgeben:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsIhr Programm muss jede Validierungsfunktion in der exakten Reihenfolge aufrufen: Benutzername, E-Mail, Alter, dann Passwort. Stoppen Sie die Validierung und zeigen Sie die Fehlermeldung an, sobald eine Validierung fehlschlägt. Verwenden Sie das Schlüsselwort throw, um Ausnahmen mit den oben gezeigten spezifischen Fehlermeldungen manuell auszulösen. Jede Validierungsfunktion sollte ihr jeweiliges Feld überprüfen und eine Ausnahme auslösen, wenn die Validierung fehlschlägt, oder eine Erfolgsmeldung ausgeben, wenn sie erfolgreich ist.
Spickzettel
Das Schlüsselwort throw ermöglicht es Ihnen, Ausnahmen manuell auszulösen, wenn Ihr Programm auf ungültige Bedingungen stößt:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Wenn Sie eine Ausnahme mit throw auslösen, stoppt das Programm die Ausführung an diesem Punkt. Dies ist nützlich für die Validierung von Eingaben und die Durchsetzung von Regeln in Funktionen, wodurch Ihr Code zuverlässiger und einfacher zu debuggen wird.
Sie können einfache String-Nachrichten auslösen oder spezifischere Ausnahmetypen erstellen. Das Auslösen von Ausnahmen ist besonders wertvoll in Validierungsfunktionen, die Eingaben prüfen müssen, bevor sie mit wichtigen Operationen fortfahren.
Probier es selbst
import 'dart:io';
void main() {
// Eingabe lesen
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO: Erstelle die Funktion validateUsername und rufe sie hier auf
print("Validating username: $username");
// TODO: Erstelle die Funktion validateEmail und rufe sie hier auf
print("Validating email: $email");
// TODO: Erstelle die Funktion validateAge und rufe sie hier auf
print("Validating age: $age");
// TODO: Erstelle die Funktion validatePassword und rufe sie hier auf
print("Validating password: $password");
// TODO: Wenn alle Validierungen erfolgreich sind, Erfolgsmeldungen ausgeben
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO: Ausnahmen behandeln und Fehlermeldung ausgeben
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO: Schreibe deine Validierungsfunktionen hierDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste6Grundlagen der Fehlerbehandlung
Was sind Exceptions?Der 'try-catch'-BlockExceptions mit 'on' abfangenDer 'finally'-BlockEine Exception auslösenRückblick - Sichere Division