Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Łatwy

Utwó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.

  1. Odczytaj ciąg znaków reprezentujący nazwę użytkownika
  2. Odczytaj ciąg znaków reprezentujący adres e-mail
  3. Odczytaj ciąg znaków reprezentujący wiek
  4. Odczytaj ciąg znaków reprezentujący hasło
  5. 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"
  6. 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"
  7. 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"
  8. 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"
  9. Wywołaj kolejno każdą funkcję walidującą i obsłuż wszystkie występujące wyjątki
  10. 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: john

Jeś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 errors

Jeś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 errors

Program 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 walidacyjne
quiz iconSprawdź się

Ta 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

Poćwicz samodzielnie: Kompilator Dart online