Lanciare un'eccezione
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 42 di 65.
A volte devi creare condizioni di errore personalizzate nel tuo codice. La parola chiave throw ti consente di generare manualmente un'eccezione quando il tuo programma incontra una situazione che non dovrebbe poter continuare.
Quando lanci un'eccezione con throw, stai essenzialmente dicendo «fermate tutto: qui c'è qualcosa che non va». Questo è utile per convalidare l'input o applicare regole nelle tue funzioni. Puoi lanciare un semplice messaggio sotto forma di stringa o creare tipi di eccezione più specifici.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}In questo esempio, se qualcuno prova a passare un'età negativa, la funzione genera immediatamente un'eccezione con un messaggio descrittivo. Questo impedisce al resto della funzione di essere eseguito con dati non validi, rendendo il tuo codice più affidabile e più facile da correggere.
Lanciare eccezioni è particolarmente utile nelle funzioni che devono convalidare i propri input prima di procedere con operazioni importanti.
Sfida
FacileCrea un programma che convalidi le informazioni dell’account utente implementando funzioni di convalida personalizzate che generano eccezioni quando vengono rilevati dati non validi. Il programma deve controllare più campi dell’account e generare messaggi di errore specifici per i diversi casi di convalida non riuscita.
- Leggi una stringa in input che rappresenta il nome utente
- Leggi una stringa in input che rappresenta l’indirizzo email
- Leggi una stringa in input che rappresenta l’età come stringa
- Leggi una stringa in input che rappresenta la password
- Crea una funzione chiamata
validateUsernameche controlla se il nome utente è valido: - Se il nome utente è vuoto o ha meno di 3 caratteri, genera l’eccezione:
"Username must be at least 3 characters long" - Se il nome utente contiene spazi, genera l’eccezione:
"Username cannot contain spaces" - Se la convalida ha esito positivo, stampa:
"Username validation passed" - Crea una funzione chiamata
validateEmailche controlla se l’email è valida: - Se l’email non contiene il simbolo
@, genera l’eccezione:"Email must contain @ symbol" - Se l’email non contiene un punto
.dopo il simbolo@, genera l’eccezione:"Email must contain a valid domain" - Se la convalida ha esito positivo, stampa:
"Email validation passed" - Crea una funzione chiamata
validateAgeche controlla se l’età è valida: - Converti la stringa dell’età in un intero usando
int.parse() - Se l’età è inferiore a 13, genera l’eccezione:
"Age must be at least 13 years old" - Se l’età è superiore a 120, genera l’eccezione:
"Age must be realistic (under 120)" - Se la convalida ha esito positivo, stampa:
"Age validation passed" - Crea una funzione chiamata
validatePasswordche controlla se la password è valida: - Se la password è più corta di 8 caratteri, genera l’eccezione:
"Password must be at least 8 characters long" - Se la convalida ha esito positivo, stampa:
"Password validation passed" - Chiama ogni funzione di convalida in sequenza e gestisci le eventuali eccezioni
- Visualizza i risultati nel formato esatto mostrato di seguito
Ad esempio, se gli input sono "john", "john@email.com", "25", "password123", il programma dovrebbe produrre:
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: johnSe gli input sono "jo", "john@email.com", "25", "password123", il programma dovrebbe produrre:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsSe gli input sono "john doe", "johnemail.com", "12", "pass", il programma dovrebbe produrre:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsIl programma deve chiamare ogni funzione di convalida nell’ordine esatto: nome utente, email, età e infine password. Interrompi la convalida e visualizza il messaggio di errore non appena una convalida non va a buon fine. Usa la parola chiave throw per generare manualmente eccezioni con i messaggi di errore specifici mostrati sopra. Ogni funzione di convalida deve controllare il campo corrispondente e generare un’eccezione se la convalida non va a buon fine, oppure stampare un messaggio di successo se ha esito positivo.
Provalo tu
import 'dart:io';
void main() {
// Leggi l'input
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO: Crea la funzione validateUsername e chiamala qui
print("Validating username: $username");
// TODO: Crea la funzione validateEmail e chiamala qui
print("Validating email: $email");
// TODO: Crea la funzione validateAge e chiamala qui
print("Validating age: $age");
// TODO: Crea la funzione validatePassword e chiamala qui
print("Validating password: $password");
// TODO: Se tutte le verifiche vanno a buon fine, stampa i messaggi di successo
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO: Gestisci le eccezioni e stampa un messaggio di errore
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO: Scrivi qui le funzioni di validazioneQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti unici6Gestione di base degli errori
Cosa sono le eccezioni?Il blocco 'try-catch'Gestire le eccezioni con 'on'Il blocco 'finally'Lanciare un'eccezioneRiepilogo - Divisione sicuraEsercitati da solo: Compilatore Dart online