• 12 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/05/2022

Fuyez la pyramide condamnée avec guard

Oui, le titre de ce chapitre sonne comme le début d'un mauvais film d'horreur des années 80... Et pour autant, nous allons parler d'un sujet très sérieux en programmation : la Pyramide Condamnée (ou Pyramid of Doom en anglais, tout de suite ça fait moins rire... Ils sont forts ces Américains...) !

La pyramide condamnée

Très bien, mais c'est quoi ?

Une illustration vaut mille mots, alors je vous laisse apprécier ce gif :

La pyramide condamnée, c'est donc quand on a des conditions les unes dans les autres qui forment une pyramide immense et rendent le code assez peu agréable à lire, à cause de toutes les indentations.

Et comme vous le savez, la lisibilité du code est tout sauf optionnelle ! C'est ce qui fera de vous des bons ou des mauvais développeurs. Donc on va prendre ce problème très au sérieux et le résoudre grâce au mot-clé  guard  .

Le mot-clé guard

Le mot-clé  guard  est un cousin de la combinaison  if-else  . Il permet lui aussi de contrôler des conditions, mais avec une syntaxe un peu particulière.

Prenons un exemple : si vous voulez contrôler qu'il n'y a pas d'erreur, vous allez écrire :

if error == nil {
   print("Tout va bien !")
} else {
   print("Oups ! Il y a une erreur.")
}

Jusque-là, rien de nouveau. Maintenant écrivons la même chose avec le mot-clé guard :

guard error == nil else {
   print("Oups ! Il y a une erreur.")
   return
}
print("Tout va bien !")

C'est un petit peu déroutant au début, alors prenons le temps de détailler :

  1. On écrit d'abord le mot-clé  guard  suivi d'une condition ; jusque-là ça ressemble au if.

  2. Ensuite, on écrit tout de suite le  else  suivi du code correspondant au cas où la condition n'est pas respectée.

  3. Ensuite, on écrit le mot-clé  return  qui empêche la suite du code de s'exécuter s’il y a une erreur.

  4. Enfin, on sait que l'erreur a été traitée s'il y en avait une, donc on peut exécuter le code correspondant au cas où la condition est respectée.

Ce mécanisme permet de traiter les erreurs d'abord, et ensuite d'exécuter son code sereinement. On appelle ce mécanisme early exit. Car guard fournit une porte de sortie rapide du code si la condition est évaluée à  false  , sinon le code continue de s'exécuter.

Voici du coup la représentation schématique de guard :

guard condition else {
   // Code si false
   return
}
// Code si true

guard-else vs if-else

OK, mais du coup quand doit-on utiliser guard plutôt que if ?

guard  ou  if  , que choisir ? Telle est la question ! La réponse est assez simple :

On utilise if pour faire de la logique entre plusieurs cas et guard pour prévenir une erreur.

Prenons un exemple : si je veux vérifier que l'utilisateur a bien rentré un e-mail dans un champ de texte, il s'agit plutôt de prévenir une erreur, donc je vais utiliser  guard  :

guard text.isEmail else {
   print("Vous n'avez pas rentré un e-mail correct.")
   return
}
print("Merci pour votre e-mail !")

Maintenant, imaginons que je lui demande son âge et que selon son âge, il va avoir le droit à des accès différents :

if age >= 18 {
   print("Vous avez accès au bar.")
} else {
   print("Vous avez accès à la salle de billard.")
}

Ici, il ne s'agit pas de renvoyer une erreur ou non, mais d'articuler une logique selon plusieurs cas, donc j'utilise  if  .

En résumé

  • La pyramide condamnée apparaît lorsqu'on enchaîne les conditions les unes dans les autres en obtenant des indentations de plus en plus grandes.

  • Le mot-clé  guard  permet de casser la pyramide condamnée en permettant la gestion d'erreur au même niveau que le cas nominal.

  • Le mot-clé  guard  s'utilise avec la syntaxe suivante :

guard condition else {
   // Code si false
   return
}
// Code si true
  • On utilise  if  pour faire le lien logique entre plusieurs cas, et  guard  pour prévenir une erreur.

Bravo ! Vos appels réseaux sont désormais de grande qualité, vous pouvez être fier de vous ! Ce qui fera vraiment la différence néanmoins, ce sera votre capacité à faire du code stable. Et qui dit stable, dit testable ! Or, tester les appels réseau ne sera pas forcément votre tasse de thé... sauf si vous passez simplement au chapitre suivant ! 

Exemple de certificat de réussite
Exemple de certificat de réussite