Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea 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.

  1. Leggi una stringa in input che rappresenta il nome utente
  2. Leggi una stringa in input che rappresenta l’indirizzo email
  3. Leggi una stringa in input che rappresenta l’età come stringa
  4. Leggi una stringa in input che rappresenta la password
  5. Crea una funzione chiamata validateUsername che 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"
  6. Crea una funzione chiamata validateEmail che 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"
  7. Crea una funzione chiamata validateAge che 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"
  8. Crea una funzione chiamata validatePassword che 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"
  9. Chiama ogni funzione di convalida in sequenza e gestisci le eventuali eccezioni
  10. 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: john

Se 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 errors

Se 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 errors

Il 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 validazione
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online