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 generare eccezioni usando diversi tipi di valori: numeri interi, stringhe o persino oggetti personalizzati. Ecco la sintassi di base:
if (someErrorCondition) {
throw "Error message"; // Lancia una stringa letterale
}Quando usi throw, il programma interrompe immediatamente l'esecuzione della funzione corrente e cerca un blocco catch che possa gestire il valore lanciato. Questo è particolarmente utile per convalidare l'input o verificare condizioni che non dovrebbero verificarsi durante la normale esecuzione del programma.
Ecco un esempio pratico di come generare 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;
}La parola chiave throw ti consente 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.
Sfida
FacileCrea 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
usernameche rappresenta il nome utente scelto dall’utente (questa riga può essere vuota) - Un intero
ageche rappresenta l’età dell’utente
Il tuo programma dovrebbe:
- Creare una funzione denominata
validateUserche accetta una stringa e un intero come parametri - All’interno della funzione, verificare se il nome utente è vuoto (ha lunghezza 0)
- Se il nome utente è vuoto, generare con
throwla stringa"Username cannot be empty" - Verificare se l’età è inferiore a 13
- Se l’età è inferiore a 13, generare con
throwla stringa"Age must be at least 13" - Se entrambe le convalide hanno esito positivo, stampare
"User validation successful" - Nella funzione principale, chiamare
validateUsercon i valori di input - Usare un blocco
tryper chiamare la funzione e un bloccocatchper gestire eventuali eccezioni di tipo stringa generate
Usa il seguente formato di output esatto:
Per una convalida riuscita:
User validation successfulPer 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 stringa generati. Se la prima convalida fallisce, la funzione genererà un’eccezione e non continuerà a verificare la seconda condizione.
Provalo tu
#include <iostream>
#include <string>
using namespace std;
int main() {
// Leggi l'input
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Scrivi il tuo codice qui
// Crea la funzione validateUser e implementa la logica di validazione
// Usa blocchi try-catch per gestire le eccezioni
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli8Gestione di base degli errori
Introduzione alle eccezioniI blocchi 'try' e 'catch'La parola chiave 'throw'Diversi tipi di eccezioniIl gestore catch-allRiepilogo - Divisione sicura3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online