• 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

Lancez des erreurs

Pendant ce cours, nous avons croisé différentes petites choses qui ne vous sont pas forcément familières. On a notamment parlé du protocole  Error  avec notre classe  QuoteError  , et on a croisé le mot-clé  try  . On n'est pas rentrés dans le détail, car je ne voulais pas vous perturber avec trop d'informations à la fois.

Mais maintenant que les choses sont derrière nous, nous allons voir tout ça sérieusement !

Appréhendez la gestion d’erreur  en Swift

Tout cela est du domaine de la gestion d'erreur en Swift. Concernant ce sujet, nous avons déjà parlé du mot-clé  guard  . Et nous allons maintenant nous attaquer à la suite avec :

  • le protocole  Error  et le mot-clé  throw  que nous allons voir dans ce chapitre ;

  • les mot-clés  try  ,  do  ,  catch  dont nous allons parler dans le prochain chapitre.

Pour découvrir tout ça, je vous propose de reprendre le Playground. Oui je sais, ça vous manquait   !

Je vous invite à télécharger ici un Playground que j'ai préparé pour vous.

Dans ce Playground, vous trouverez l'implémentation très simple d'un système de commande. Imaginez un panier sur un site web. Il y a donc une classe  Order  qui gère la commande.

Cette classe admet deux propriétés :

  • items  qui est un tableau d'items. Les items étant les objets de la commande ;

  • status  : il y a deux statuts possibles :  pending  , si la commande est en cours, et  payed  si la commande est payée.

Ensuite, il y a une méthode  pay  qui permet de payer la commande à condition qu'elle soit toujours en cours, pas vide, et que le moyen de paiement  (PaymentMethod)  soit valide et suffisamment approvisionné. Elle renvoie le prix total de la commande.

C'est parti !

Utilisez le protocole Error

Errorest un protocole qui définit les erreurs en Swift.

Créez les erreurs avec le protocole Error

La façon la plus classique d'utiliser ce protocole, c'est de définir une énumération qui adopte le protocole  Error  . Nous allons donc définir une énumération  OrderError  dans notre classe  Order  comme ceci :

enum OrderError: Error {
}

Dans cette énumération, nous allons lister les différents cas d'erreur possibles dans notre code. Il va y en avoir 4 :

  • ajout d'un élément dans la commande alors que celle-ci est déjà payée ;

  • payer une commande vide ;

  • payer alors que la méthode de paiement n'est pas valide (carte expirée, par exemple) ;

  • payer au-delà du plafond de la méthode de paiement.

Nous allons exprimer tout cela dans notre énumération.

enum OrderError: Error {
   case orderAlreadyPayed
   case orderIsEmpty
   case invalidPaymentMethod
   case insufficientFundings
}

Signalez les erreurs avec throw

Dans le code, nous allons maintenant utiliser les erreurs que nous venons de créer. Pour signaler une erreur, on utilise le mot-clé  throw  comme ceci :

guard status == .pending else {
   throw OrderError.orderAlreadyPayed
}

Plusieurs choses à noter ici :

  • throw  vous fait quitter le contexte du code. Comme  return  , lorsque throw est appelé, on quitte la fonction.

  • throw  s'utilise avec une erreur. Cette erreur nous permet d'avoir une information claire sur ce qu'il s'est passé, c'est beaucoup mieux qu'un  return 0  qui ne donne aucune explication du problème, et en plus risque d'être mal interprété.

Lorsqu'on  throw  une erreur, la personne qui va utiliser ce code va devoir gérer l'erreur, sinon le code va planter. Pour prévenir qu'une fonction peut renvoyer une erreur, on doit lui ajouter le mot-clé  throws  :

func pay(with paymentMethod: PaymentMethod) throws -> Double { // On ajoute throws à la déclaration
   guard status == .pending else {
      throw OrderError.orderAlreadyPayed
   }
   // (...)
}

À vous de jouer !

À vous de jouer ! Rajoutez la gestion d'erreur pour le reste de la fonction pay ! Essayez par vous-même avant de regarder la correction !

Vous pouvez consulter ce corrigé pour vérifier votre travail.

En résumé

  • Implémentez le protocole Error avec une énumération pour définir nos différents cas d'erreurs.

  • Lancez une erreur en utilisant le mot-clé  throw  suivi du type d’erreur.

  • L'exécution de  throw  fait quitter la fonction dans laquelle il est défini.

  • Ajoutez la mention  throws  pour toute fonction qui fait appel à  throw  .

Après avoir appris comment créer et lancer des erreurs, nous allons voir dans le prochain chapitre comment les gérer !

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