Les énumérations n’ont rien à voir avec la programmation orientée objet et JavaScript n’a pas d’énumération. Au lieu de cela, les énumérations sont utilisées chaque fois que vous avez le choix entre un ensemble fixe de valeurs. Par exemple, un booléen est un choix entre vrai et faux, qui pourrait être implémenté en tant que enum Bool { False, True }
. Dans une bibliothèque graphique, nous pourrions avoir un ENUM pour les alignements: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
La manière dont l’énum est mis en œuvre n’est généralement pas pertinente, l’important étant que chaque valeur possible soit distincte. De nombreuses langues utilisent des entiers pour les énumérations, bien que certaines, comme Java, prennent en charge des objets arbitraires.
Jusqu'à présent, nous aurions tout aussi bien pu utiliser des constantes, par exemple const int LEFT = -1, CENTER = 0, RIGHT = 1
. Cependant, un compilateur sait que les valeurs enum vont ensemble. Ainsi, lorsque je permute les valeurs d’énumération switch(value) {case LEFT: ...; case RIGHT: ...;}
, le compilateur peut me prévenir que j’ai oublié le CENTER
cas. Cela peut vous faire gagner beaucoup de temps. Dans les langues sans énums ou sans construction switch-case, ceci peut être simulé avec le modèle de visiteur, bien que cela soit plus utile en présence de typage statique.
L'autre avantage est que les enums peuvent être traités comme un type séparé. Par exemple, je peux déclarer qu'une méthode prend un HAlignment
paramètre plutôt qu'un entier. La compilation du code échouera si je ne fournis rien d’autre qu’une des trois valeurs possibles de HAlignment. Cependant, les énumérations de C ne sont pas bien encapsulées et les constantes d'énumération peuvent être utilisées indifféremment avec des entiers. Les autres langues sont plus strictes ici.
En JavaScript, nous n'obtenons aucun de ces avantages. L'exemple donné déclare un objet traité comme une énumération. Cela présente certains avantages pour le programmeur: par exemple, cela facilite la documentation, regroupe toutes les «constantes» dans un seul objet,…. Cependant, il est juste une convention qu'un tel objet est semblable à une énumération.
Le point ici est que HTML n'a qu'un ensemble de balises fini et connu. Vous pouvez consulter la spécification HTML5 et insérer ces noms d'éléments dans votre code en tant qu'énumération, et ainsi rendre plus difficile l'insertion d'une <blink>
balise dans votre programme. Il est préférable d’encoder ces connaissances à un endroit donné que de mélanger votre code avec des littéraux de chaîne spéciaux (ou pire, des nombres magiques).