Rzucanie wyjątku
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 42 z 65.
Czasami musisz samodzielnie tworzyć warunki błędów w swoim kodzie. Słowo kluczowe throw pozwala ręcznie wywołać wyjątek, gdy program napotka sytuację, w której nie powinien kontynuować działania.
Gdy throw zgłaszasz wyjątek, tak naprawdę mówisz: „zatrzymaj wszystko — coś jest nie tak”. Przydaje się to do walidowania danych wejściowych lub egzekwowania reguł w funkcjach. Możesz zgłosić prosty komunikat tekstowy lub utworzyć bardziej szczegółowe typy wyjątków.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}W tym przykładzie, jeśli ktoś spróbuje przekazać ujemny wiek, funkcja natychmiast zgłasza wyjątek z opisowym komunikatem. Zapobiega to dalszemu wykonywaniu funkcji z nieprawidłowymi danymi, dzięki czemu kod jest bardziej niezawodny i łatwiejszy do debugowania.
Rzucanie wyjątków jest szczególnie przydatne w funkcjach, które muszą zweryfikować swoje dane wejściowe przed przystąpieniem do ważnych operacji.
Wyzwanie
ŁatwyUtwórz program, który sprawdza poprawność informacji o koncie użytkownika, implementując niestandardowe funkcje walidujące, które zgłaszają wyjątki po wykryciu nieprawidłowych danych. Program powinien sprawdzać wiele pól konta i zgłaszać konkretne komunikaty o błędach w przypadku różnych niepowodzeń walidacji.
- Odczytaj ciąg znaków reprezentujący nazwę użytkownika
- Odczytaj ciąg znaków reprezentujący adres e-mail
- Odczytaj ciąg znaków reprezentujący wiek
- Odczytaj ciąg znaków reprezentujący hasło
- Utwórz funkcję o nazwie
validateUsername, która sprawdza, czy nazwa użytkownika jest prawidłowa: - Jeśli nazwa użytkownika jest pusta lub ma mniej niż 3 znaki, zgłoś wyjątek:
"Username must be at least 3 characters long" - Jeśli nazwa użytkownika zawiera spacje, zgłoś wyjątek:
"Username cannot contain spaces" - Jeśli walidacja zakończy się powodzeniem, wyświetl:
"Username validation passed" - Utwórz funkcję o nazwie
validateEmail, która sprawdza, czy adres e-mail jest prawidłowy: - Jeśli adres e-mail nie zawiera symbolu
@, zgłoś wyjątek:"Email must contain @ symbol" - Jeśli adres e-mail nie zawiera kropki
.po symbolu@, zgłoś wyjątek:"Email must contain a valid domain" - Jeśli walidacja zakończy się powodzeniem, wyświetl:
"Email validation passed" - Utwórz funkcję o nazwie
validateAge, która sprawdza, czy wiek jest prawidłowy: - Przekonwertuj ciąg znaków z wiekiem na liczbę całkowitą za pomocą
int.parse() - Jeśli wiek jest mniejszy niż 13, zgłoś wyjątek:
"Age must be at least 13 years old" - Jeśli wiek jest większy niż 120, zgłoś wyjątek:
"Age must be realistic (under 120)" - Jeśli walidacja zakończy się powodzeniem, wyświetl:
"Age validation passed" - Utwórz funkcję o nazwie
validatePassword, która sprawdza, czy hasło jest prawidłowe: - Jeśli hasło ma mniej niż 8 znaków, zgłoś wyjątek:
"Password must be at least 8 characters long" - Jeśli walidacja zakończy się powodzeniem, wyświetl:
"Password validation passed" - Wywołaj kolejno każdą funkcję walidującą i obsłuż wszystkie występujące wyjątki
- Wyświetl wyniki dokładnie w formacie pokazanym poniżej
Na przykład, jeśli danymi wejściowymi są "john", "john@email.com", "25", "password123", program powinien wyświetlić:
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: johnJeśli danymi wejściowymi są "jo", "john@email.com", "25", "password123", program powinien wyświetlić:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsJeśli danymi wejściowymi są "john doe", "johnemail.com", "12", "pass", program powinien wyświetlić:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsProgram musi wywoływać funkcje walidujące dokładnie w tej kolejności: nazwa użytkownika, adres e-mail, wiek, a następnie hasło. Przerwij walidację i wyświetl komunikat o błędzie natychmiast po niepowodzeniu dowolnej walidacji. Użyj słowa kluczowego throw, aby ręcznie zgłaszać wyjątki z konkretnymi komunikatami o błędach pokazanymi powyżej. Każda funkcja walidująca powinna sprawdzać odpowiednie pole i zgłaszać wyjątek, jeśli walidacja się nie powiedzie, lub wyświetlać komunikat o powodzeniu, jeśli się powiedzie.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Odczytaj dane wejściowe
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO: Utwórz funkcję validateUsername i wywołaj ją tutaj
print("Validating username: $username");
// TODO: Utwórz funkcję validateEmail i wywołaj ją tutaj
print("Validating email: $email");
// TODO: Utwórz funkcję validateAge i wywołaj ją tutaj
print("Validating age: $age");
// TODO: Utwórz funkcję validatePassword i wywołaj ją tutaj
print("Validating password: $password");
// TODO: Jeśli wszystkie walidacje zakończą się pomyślnie, wyświetl komunikaty o sukcesie
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO: Obsłuż wyjątki i wyświetl komunikat o błędzie
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO: Napisz tutaj swoje funkcje walidacyjneTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gości6Podstawy obsługi błędów
Czym są wyjątki?Blok „try-catch”Przechwytywanie wyjątków za pomocą „on”Blok „finally”Rzucanie wyjątkuPodsumowanie – bezpieczne dzieleniePoćwicz samodzielnie: Kompilator Dart online