Lever une exception
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 42 sur 65.
Parfois, vous devez créer vos propres conditions d'erreur dans votre code. Le mot-clé throw vous permet de déclencher manuellement une exception lorsque votre programme rencontre une situation qui ne devrait pas être autorisée à continuer.
Lorsque vous lancez une exception avec throw, vous dites essentiellement « arrêtez tout - quelque chose ne va pas ici ». C'est utile pour valider les entrées ou appliquer des règles dans vos fonctions. Vous pouvez lancer un simple message sous forme de chaîne de caractères ou créer des types d'exceptions plus spécifiques.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Dans cet exemple, si quelqu'un essaie de passer un âge négatif, la fonction lève immédiatement une exception avec un message descriptif. Cela empêche le reste de la fonction de s'exécuter avec des données invalides, rendant votre code plus fiable et plus facile à déboguer.
Lever des exceptions est particulièrement utile dans les fonctions qui doivent valider leurs entrées avant de procéder à des opérations importantes.
Défi
FacileCréez un programme qui valide les informations d'un compte utilisateur en implémentant des fonctions de validation personnalisées qui lèvent des exceptions lorsque des données invalides sont détectées. Votre programme doit vérifier plusieurs champs du compte et lever des messages d'erreur spécifiques pour différents échecs de validation.
- Lisez une entrée de type chaîne de caractères représentant le nom d'utilisateur (username)
- Lisez une entrée de type chaîne de caractères représentant l'adresse e-mail
- Lisez une entrée de type chaîne de caractères représentant l'âge
- Lisez une entrée de type chaîne de caractères représentant le mot de passe
- Créez une fonction appelée
validateUsernamequi vérifie si le nom d'utilisateur est valide : - Si le nom d'utilisateur est vide ou comporte moins de 3 caractères, levez l'exception :
"Username must be at least 3 characters long" - Si le nom d'utilisateur contient des espaces, levez l'exception :
"Username cannot contain spaces" - Si la validation réussit, affichez :
"Username validation passed" - Créez une fonction appelée
validateEmailqui vérifie si l'e-mail est valide : - Si l'e-mail ne contient pas le symbole
@, levez l'exception :"Email must contain @ symbol" - Si l'e-mail ne contient pas de point
.après le symbole@, levez l'exception :"Email must contain a valid domain" - Si la validation réussit, affichez :
"Email validation passed" - Créez une fonction appelée
validateAgequi vérifie si l'âge est valide : - Convertissez la chaîne de caractères de l'âge en entier en utilisant
int.parse() - Si l'âge est inférieur à 13, levez l'exception :
"Age must be at least 13 years old" - Si l'âge est supérieur à 120, levez l'exception :
"Age must be realistic (under 120)" - Si la validation réussit, affichez :
"Age validation passed" - Créez une fonction appelée
validatePasswordqui vérifie si le mot de passe est valide : - Si le mot de passe est plus court que 8 caractères, levez l'exception :
"Password must be at least 8 characters long" - Si la validation réussit, affichez :
"Password validation passed" - Appelez chaque fonction de validation l'une après l'autre et gérez toutes les exceptions qui surviennent
- Affichez les résultats dans le format exact indiqué ci-dessous
Par exemple, si les entrées sont "john", "john@email.com", "25", "password123", votre programme doit afficher :
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: johnSi les entrées sont "jo", "john@email.com", "25", "password123", votre programme doit afficher :
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errorsSi les entrées sont "john doe", "johnemail.com", "12", "pass", votre programme doit afficher :
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errorsVotre programme doit appeler chaque fonction de validation dans l'ordre exact : nom d'utilisateur, e-mail, âge, puis mot de passe. Arrêtez la validation et affichez le message d'erreur dès qu'une validation échoue. Utilisez le mot-clé throw pour déclencher manuellement des exceptions avec les messages d'erreur spécifiques indiqués ci-dessus. Chaque fonction de validation doit vérifier son champ respectif et lever une exception si la validation échoue, ou afficher un message de succès si elle réussit.
Aide-mémoire
Le mot-clé throw vous permet de déclencher manuellement des exceptions lorsque votre programme rencontre des conditions invalides :
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}Lorsque vous utilisez throw pour une exception, le programme arrête l'exécution à ce point. C'est utile pour valider les entrées et appliquer des règles dans les fonctions, rendant votre code plus fiable et plus facile à déboguer.
Vous pouvez lancer de simples messages sous forme de chaînes de caractères ou créer des types d'exceptions plus spécifiques. Lancer des exceptions est particulièrement précieux dans les fonctions de validation qui doivent vérifier les entrées avant de poursuivre des opérations importantes.
Essayez vous-même
import 'dart:io';
void main() {
// Lire l'entrée
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO : Créer la fonction validateUsername et l'appeler ici
print("Validating username: $username");
// TODO : Créer la fonction validateEmail et l'appeler ici
print("Validating email: $email");
// TODO : Créer la fonction validateAge et l'appeler ici
print("Validating age: $age");
// TODO : Créer la fonction validatePassword et l'appeler ici
print("Validating password: $password");
// TODO : Si toutes les validations réussissent, afficher les messages de succès
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO : Gérer les exceptions et afficher le message d'erreur
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO : Écrivez vos fonctions de validation iciCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques6Gestion de base des erreurs
Que sont les exceptions ?Le bloc 'try-catch'Intercepter des exceptions avec 'on'Le bloc 'finally'Lever une exceptionRécapitulatif - Division sécurisée