La magie des énumérations

Dans la plupart du temps quand je fais des audits de codes, je remarque que beaucoup de développeurs préfèrent des constantes du type :

// Constantes : Voitures
public static final int VOITURE_ELECTRIQUE = 0;
public static final int VOITURE_DIESEL = 1;
public static final int VOITURE_ESSENCE = 2;
// Constantes : Etats
public static final int ETAT_MARCHE = 0;
public static final int ETAT_ARRET = 1;

Cette technique a beaucoup inconvénients :
  1. Il n’y a pas de sécurité, on peut passer un véhicule à une méthode qui attend un état,
  2. Il faut s’assurer que deux constantes n’ont pas la même valeur, sinon on peut avoir des bogues difficiles à détecter,
  3. Lors du débogage, on ne voit qu’un nombre et pas une constante parlante,
  4. Si les valeurs sont utilisées en dur, ils conduiront surement à des problèmes de maintenance et de lisibilité.
  5. etc.
Si ce pattern est utilisé avec des String c’est encore pire, parce que lors des comparaisons on aura à comparer des chaines de caractères et non pas de entiers.

Heureusement, à partir de la version 1.5, le langage fournit une alternative pour éviter les inconvénient des entiers et des chaines de caractères :

public enum Voiure{ ELECTRIQUE, DIESEL, ESSENCE}
public enum Etat{ MARCHE, ARRET }

L’utilisation des énumérations apporte beaucoup d’utilité, car elles sont sérialisables, le nom de la constantes est sa valeur ainsi le compilateur s’assurera que nous n’avons rien loupé.

Commentaires

Posts les plus consultés de ce blog

Quel type choisir ?