Dart en 10 chapitres : Chap 6 Exception.
Salut, c’est encore un plaisir de vous avoir dans la course !
En ce chapitre, nous allons parler d’une grande notion pour une meilleure gestion de l’expérience utilisateur en Flutter via le langage Dart.
Mais avant tout, si t’as pas eu à voir les notions précédentes, n’hésite pas à passer par là pour une bonne suite du cours. Trouve les ici.
0. Vue d’ensemble
Dans ce chapitre, nous allons apprendre la gestion d’exceptions en Dart. Il sera question de savoir :
a. Qu’est-ce qu’une exception
b. Quels sont les types d’exceptions en Dart
c. Quels sont les avantages que nous donnent la gestion des exceptions
d. Comment se fait la gestion des exceptions en Dart
e. Qu’est-ce qu’une trace de pile
f. Comment créer notre propre classe pour la gestion d’exception
g. Conclusion
1. Qu’est-ce qu’une exception
Une exception est un événement inattendu qui se produit lors de l’exécution d’un programme. Elle peut être causée par une erreur de programmation, une erreur d’entrée utilisateur ou une défaillance du système (Manque de connexion internet par exemple).
Cela peut faire que l’application s’arrête, plante ou dysfonctionne subitement, ce qui n’est pas bon pour nos utilisateurs.
En Dart, chaque exception est un sous-type de la classe Exception. Et elles doivent être gérer par le développeur que tu es pour éviter un arrêt soudain de l’application.
2. Types d’exceptions en Dart
Comme types d’exceptions en Dart, nous pouvons citer :
- les erreurs de programmation : ce sont les erreurs qui surviennent dans le code source, comme une division par zéro ou une référence à une variable inexistante.
- les erreurs d’entrée utilisateur : ici, ce sont celles provenant des données saisies par l’utilisateur, comme un format incorrect ou une valeur invalide.
- les erreurs de temps mort : celles-ci arrivent lorsque les temps d’attente d’un résultat asynchrone sont épuisés, comme dans le cas d’une récupération des éléments d’une base de données.
- les défaillances du système : erreurs dues au système d’exploitation ou au matériel, comme une panne de mémoire ou une perte de connexion réseau.
3. Avantages de la gestion d’exceptions
Les avantages que nous donnent la gestion d’exceptions sont nombreux, nous pouvons citer :
- l’amélioration de la robustesse de notre code en permettant de gérer les erreurs de manière prévisible.
- la facilité de la maintenance du code en rendant le traitement des erreurs plus clair et plus facile à comprendre.
- l’amélioration de l’expérience utilisateur en affichant des messages d’erreur clairs et précis.
4. Gestion des exceptions en Dart
Dart fournit plusieurs outils pour gérer les exceptions :
- Bloc
try
-catch
: Permet d'attraper les exceptions et de les traiter. - Mot-clé
throw
: Permet de lever une exception. - Mot-clé
finally
: Permet d'exécuter du code quelle que soit l'issue du bloctry
-catch
(Que l’on ait une exception ou pas, cette partie sera toujours exécutée).
Prenons un exemple d’erreur pour bien assimiler cette notion.
//Essayons d'afficher le résultat de cette division
/*Le signe ~ veut juste dire que ce résultat doit renvoyer juste la partie
entier de la division et laisser la partie après la virgule*/
int resultat = 23 ~/ 0;
Et voilà le résultat sur DartPad, mais dans un IDE comme VSCode, tu auras toutes les informations d’erreur qu’il y a et celle-ci est une erreur du sous-type “IntegerDivisionByZeroException” de la classe Exception.
Alors commençons à utiliser nos outils que Dart nous donne pour la gestion des erreurs.
a. Commençons avec le bloc try
-catch
:
//Exemple de la gestion d'erreur avec le bloc try - catch
try{
int resultat = 23 ~/ 0;
print('Le résultat vaut $resultat');
} catch(e){
print("L'erreur est $e");
}
Voyons un peu le message d’erreur dans VSCode, c’est plus clair que sur DartPad. Donc l’erreur est du sous-type “IntegerDivisionByZeroException” de la classe Exception en Dart comme on l’avait dit au début, chaque erreur en Dart est un sous-type de la class Exception.
Ainsi, pour capter une exception avec sa nature (sous-type de la class Exception) le bloc try
-catch
est l’outil qu’il faut.
b. Pour l’utilité du mot-clé throw
nous le verrons dans la partie de la création de notre propre classe d’exception.
c. Voyons dans le même exemple l’utilité du mot-clé finally
:
//Exemple de la gestion d'erreur avec le bloc try - catch + le mot-clé finally
try{
int resultat = 23 ~/ 0;
print('Le résultat vaut $resultat');
} catch(e){
print("L'erreur est $e\n");
} finally {
print("Cette instruction s'exécutera toujours qu'on ait exception ou pas");
}
Bing ! Le bloc finally
s’est exécuté même si on a l’exception, vous pouvez tenter de mettre un code qui sera exécuté sans exception vous verrez que le bloc finally
sera tout de même exécuter.
5. Trace de pile ou d’exception
La trace de pile ou d’exception est aussi un outil qu’on retrouve dans le bloc try
-catch
qui permet d’afficher les différents événements ayant eu lieu au courant d’exception.
Cela se fait en ajoutant une variable dans la deuxième partie du bloc, donc la partie catch
, une variable qui récupérera tous les événements de l’exception et l’afficher.
Revenons sur l’exemple de la division par zéro.
//Exemple de la gestion d'erreur avec le bloc try - catch
try{
int resultat = 23 ~/ 0;
print('Le résultat vaut $resultat');
//Ajout de la var s pour récupérer la trace d'exception
} catch(e, s){
print("L'erreur est $e");
print("La trace de pile est $s");
}
Et voilà, nous avons tous les événements ayant eu lieu durant l’exception.
6. Création de notre propre classe pour la gestion d’exceptions
Bien que nous verrons la notion des classes dans le chapitre suivant, voyons déjà comment peut-on créer notre propre classe d’exception en Dart puis nous aurons à mieux comprendre cette notion de classe en Dart dans le chapitre qui suit.
Pour s’y faire nous commencerons par le mot-clé class
pour définir une class, puis vient le nom de la classe suivi du mot-clé implements
pour faire de notre classe une implémentation d’une classe existante de Dart, dans notre cas c’est la classe Exception, puis le corps de la classe. Voyons cela dans un exemple :
//Notre classe qui gérera l'exception avec un message défini par nous-même
class EstUnNombreNegatif implements Exception {
String messageErreur = "Tu ne peux pas entrer un nombre négatif";
}
//Une méthode qui nous permettra de vérifier si le nombre entré est négatif ou non
void verificationNombre(int n) {
if (n < 0) {
//Si il l'est, on lève l'exception depuis notre classe de gestion d'exception via notre mot-clé throw
throw EstUnNombreNegatif();
}
}
void main() {
try {
int nombre = -23;
//Vérification du nombre entré
verificationNombre(nombre);
print('$nombre');
} catch (e) {
//création d'une var qui est une instance de notre classe de gestion d'exception
dynamic message = EstUnNombreNegatif();
print(message.messageErreur);
}
}
Voilà comment créer sa propre classe de gestion d’exception en Dart, avec son message personnalisé. Pour toutes notions qui vous semblent floues, veuillons voir la notion de Classe en Dart dans le chapitre suivant.
7. Conclusion
Nous voici à la fin de cette notion grande et enrichissante que nous offre Dart pour optimiser nos codes et rendre plus agréable l’expérience utilisateur dans nos applications Flutter.
Il a été question d’apprendre ce que c’est une exception dans son général, puis quels sont les types d’exceptions en Dart, quels sont les avantages que nous offrent la gestion d’exceptions, comment gérer les exceptions avec les outils que nous offrent Dart, qu’appelle-t-on une trace de pile ou d’exception et enfin comment créer notre propre classe pour la gestion d’exceptions.
Merci encore de rester avec nous, continuons le chemin qui est presque au bout avec le chapitre suivant qui nous parlera de la POO en Dart.
Portez vous bien et n’oubliez pas : “Ne limitez pas vos rêves !”
😉