Le mot-clé 'throw'
Fait partie de la section Logique et Flux du Journey C++ de Coddy. Leçon 50 sur 56.
Parfois, tu dois signaler qu’une erreur s’est produite dans ton propre code, plutôt que de simplement intercepter les exceptions lancées par d’autres fonctions. Le mot-clé throw te permet de déclencher manuellement une exception lorsque ton programme détecte un problème.
Vous pouvez lancer différents types de valeurs comme exceptions — des entiers, des chaînes ou même des objets personnalisés. Voici la syntaxe de base :
if (someErrorCondition) {
throw "Error message"; // Lance une chaîne littérale
}Lorsque tu utilises throw, le programme cesse immédiatement d’exécuter la fonction en cours et recherche un bloc catch capable de gérer la valeur lancée. C’est particulièrement utile pour valider les entrées ou vérifier des conditions qui ne devraient pas se produire lors de l’exécution normale du programme.
Voici un exemple pratique de levée d'une exception lorsqu'une entrée invalide est détectée :
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}L’appelant place l’appel dans un bloc try. Une chaîne littérale lancée a le type const char* ; c’est donc le type indiqué par le bloc catch, et son paramètre contient le message :
try {
checkAge(-5);
} catch (const char* message) {
std::cout << "Error: " << message << std::endl;
}
// Sortie : Error: Age cannot be negative!Le mot-clé throw vous permet de contrôler quand et comment les erreurs sont signalées dans vos programmes, rendant vos fonctions plus robustes et prévisibles lorsqu’elles traitent des conditions invalides.
Défi
FacileCrée un programme qui implémente la validation des entrées à l'aide du mot-clé throw pour déclencher manuellement des exceptions lorsque des conditions invalides sont détectées. Ce défi mettra à l'épreuve ta compréhension de l'utilisation de throw pour signaler des erreurs dans tes propres fonctions.
Les entrées suivantes seront fournies :
- Une chaîne
usernamereprésentant le nom d'utilisateur choisi par une personne (cette ligne peut être vide) - Un entier
agereprésentant l'âge de la personne
Ton programme doit :
- Créer une fonction nommée
validateUserqui prend une chaîne et un entier comme paramètres - Dans la fonction, vérifier si le nom d'utilisateur est vide (a une longueur de 0)
- Si le nom d'utilisateur est vide,
throwla chaîne"Username cannot be empty" - Vérifier si l'âge est inférieur à 13
- Si l'âge est inférieur à 13,
throwla chaîne"Age must be at least 13" - Si les deux validations réussissent, afficher
"User validation successful" - Dans la fonction principale, appeler
validateUseravec les valeurs d'entrée - Utiliser un bloc
trypour appeler la fonction et un bloccatchpour gérer toute exception de type chaîne lancée
Utilise le format de sortie exact suivant :
En cas de validation réussie :
User validation successfulEn cas d'erreurs de validation :
Validation error: [error_message]N'oublie pas que lorsque tu utilises throw, le programme cesse immédiatement d'exécuter la fonction actuelle et cherche un bloc catch correspondant. Le bloc catch doit spécifier le type const char* pour gérer les littéraux de chaîne lancés. Si la première validation échoue, la fonction lancera une exception et ne poursuivra pas la vérification de la deuxième condition.
Essayez vous-même
#include <iostream>
#include <string>
using namespace std;
// TODO: Écrire la fonction validateUser ici, au-dessus de main
// Elle prend un string username et un int age, et lance un littéral de chaîne si une vérification échoue
int main() {
// Lire l'entrée
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: Appeler validateUser dans un bloc try
// et intercepter le message lancé avec catch (const char* error)
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et Flux
1Pointeurs et mémoire
Qu'est-ce qu'un pointeur ?Opérateur d'adresseOpérateur de déréférencementPointeurs nulsPointeurs et tableauxMémoire dynamique avec 'new'Libérer la mémoire avec 'delete'Récapitulatif - Pratique des pointeurs2Vecteurs (Tableaux dynamiques)
Introduction à std::vectorCréer un vecteurAjouter des élémentsAccéder aux élémentsTaille d'un vecteurItérer avec une boucle ForBoucle For basée sur l'intervalleSupprimer des élémentsRécapitulatif - Opérations sur les vecteurs5Projet : Outil d'inventaire
Configuration du projetAjout et mise à jour d'articles8Gestion de base des erreurs
Introduction aux exceptionsLes blocs 'try' et 'catch'Le mot-clé 'throw'Les différents types d'exceptionsLe gestionnaire d'exceptions génériqueRécapitulatif - Division sécurisée3Projet : Outil de liste de tâches
Présentation du projetAjouter une tâcheEntraînez-vous par vous-même : Compilateur C++ en ligne