Présentation du pattern "Error first"

Une astuce simple pour améliorer la lecture de votre code
Samedi 27 juin 2020

Coder un algorithme (ou une application), c’est bien ! Pourvoir relire le code derrière, c’est mieux !

Problématique

Lorsque nous codons, nous avons une tendance à écrire ceci:

if (condition1) {
if (condition2) {
if (condition3) {
if (condition4) {
return lancerOperation();
} else {
throw new Exception("Erreur: condition 4");
}
} else {
throw new Exception("Erreur: condition 3");
}
} else {
throw new Exception("Erreur: condition 2");
}
} else {
throw new Exception("Erreur: condition 1");
}

À première vue, ce code à l’air très très compliqué. En effet, il y a des if () else partout, est il est très compliqué de savoir qui fait quoi.

  • Le else de la première condition se retrouve en dernier.
  • Le else de la deuxième condition se retrouve en avant-dernier.
  • Le else de la troisième condition se retrouve deuxième.
  • Le else de la quatrième condition se retrouve premier.

Ici le code est très compliqué à lire / relire et pas pratique à maintenir !

De plus, il y a les indentations à prendre en compte : L’indentation, c’est bien, mais le trop d’indentations tue ! Nous avons du mal à distinguer quel code est relié à quel code.

Solution

La solution de ce problème est d’utiliser le pattern error first.

Il s’agit en effet de faire le raisonnement inverse : nous allons commencer uniquement par les erreurs.

Regardons l’exemple qui suit, qui fait exactement la même chose que le code précédent:

if (!condition1) {
throw new Exception("Erreur: condition 1");
}
if (!condition2) {
throw new Exception("Erreur: condition 2");
}
if (!condition3) {
throw new Exception("Erreur: condition 3");
}
if (!condition4) {
throw new Exception("Erreur: condition 4");
}
return lancerOperation();

Magie, voilà un code qui semble plus facile à comprendre ! Pourquoi ? Car nous avons séparé le code, chaque erreur est traitée indépendamment les unes des autres.

Le code binaire généré par la machine est EXACTEMENT le même ! Donc pas de perte de performance à ce niveau là !


Articles recommandés