Menu
CoddyTech

La parola chiave 'throw'

Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 50 di 56.

A volte devi segnalare che si è verificato un errore nel tuo codice, invece di limitarti a intercettare le eccezioni generate da altre funzioni. La parola chiave throw ti permette di generare manualmente un’eccezione quando il tuo programma rileva un problema.

Puoi lanciare diversi tipi di valori come eccezioni: numeri interi, stringhe o persino oggetti personalizzati. Ecco la sintassi di base:

if (someErrorCondition) {
    throw "Error message";  // Lanza una cadena literal
}

Quando usi throw, il programma smette immediatamente di eseguire la funzione corrente e cerca un blocco catch in grado di gestire il valore lanciato. Questo è particolarmente utile per convalidare l’input o controllare condizioni che non dovrebbero verificarsi durante la normale esecuzione del programma.

Ecco un esempio pratico di come lanciare un'eccezione quando si rileva un input non valido:

void checkAge(int age) {
    if (age < 0) {
        throw "Age cannot be negative!";
    }
    std::cout << "Age is valid: " << age << std::endl;
}

Il chiamante racchiude la chiamata in un blocco try. Una stringa letterale lanciata ha tipo const char*, quindi questo è il tipo indicato nel blocco catch, e il suo parametro contiene il messaggio:

try {
    checkAge(-5);
} catch (const char* message) {
    std::cout << "Error: " << message << std::endl;
}
// Output: Error: Age cannot be negative!

La parola chiave throw ti permette di controllare quando e come vengono segnalati gli errori nei tuoi programmi, rendendo le tue funzioni più robuste e prevedibili quando gestiscono condizioni non valide.

challenge icon

Sfida

Facile

Crea un programma che implementi la convalida dell’input usando la parola chiave throw per generare manualmente eccezioni quando vengono rilevate condizioni non valide. Questa sfida metterà alla prova la tua comprensione di come usare throw per segnalare errori nelle tue funzioni.

Verranno forniti i seguenti input:

  • Una stringa username che rappresenta il nome utente scelto da un utente (questa riga può essere vuota)
  • Un intero age che rappresenta l’età dell’utente

Il tuo programma dovrebbe:

  1. Creare una funzione denominata validateUser che accetta una stringa e un intero come parametri
  2. All’interno della funzione, controllare se il nome utente è vuoto (ha lunghezza 0)
  3. Se il nome utente è vuoto, throw la stringa "Username cannot be empty"
  4. Controllare se l’età è inferiore a 13
  5. Se l’età è inferiore a 13, throw la stringa "Age must be at least 13"
  6. Se entrambe le convalide hanno esito positivo, stampare "User validation successful"
  7. Nella funzione principale, chiamare validateUser con i valori di input
  8. Usare un blocco try per chiamare la funzione e un blocco catch per gestire eventuali eccezioni di tipo stringa generate

Usa il seguente formato di output esatto:

Per una convalida riuscita:

User validation successful

Per gli errori di convalida:

Validation error: [error_message]

Ricorda che quando usi throw, il programma interrompe immediatamente l’esecuzione della funzione corrente e cerca un blocco catch corrispondente. Il blocco catch dovrebbe specificare il tipo const char* per gestire i valori letterali stringa generati. Se la prima convalida non ha esito positivo, la funzione genererà un’eccezione e non continuerà a controllare la seconda condizione.

Provalo tu

#include <iostream>
#include <string>
using namespace std;

// TODO: Scrivi la funzione validateUser qui, sopra main
// Accetta un parametro string username e un parametro int age e lancia un letterale stringa se un controllo fallisce

int main() {
    // Leggi l'input
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: Chiama validateUser all'interno di un blocco try
    // e intercetta il messaggio lanciato con catch (const char* error)
    
    return 0;
}
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 C++ online