Gli enum non hanno nulla a che fare con OOP e JavaScript non ha enumerazioni. Invece, gli enum sono usati ogni volta che c'è una scelta tra un set fisso di valori. Ad esempio, un booleano è una scelta tra vero e falso, che potrebbe essere implementato come enum Bool { False, True }
. In una libreria GUI, potremmo avere un enum per allineamenti: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Di solito è irrilevante come viene implementato l'enum, la parte importante è che ogni possibile valore è distinto. Molte lingue usano numeri interi per gli enum, sebbene alcuni come Java supportino oggetti arbitrari.
Fino ad ora avremmo potuto usare costanti, ad es const int LEFT = -1, CENTER = 0, RIGHT = 1
. Tuttavia, un compilatore sa che i valori enum appartengono insieme. Quindi quando cambio i valori enum switch(value) {case LEFT: ...; case RIGHT: ...;}
, il compilatore può avvisarmi che ho dimenticato il CENTER
caso. Questo può essere un notevole risparmio di tempo. Nelle lingue senza enumerazioni o senza costrutto di un caso switch, questo può essere simulato con il modello di visitatore, sebbene ciò sia più utile in presenza della tipizzazione statica.
L'altro vantaggio è che gli enum possono essere trattati come un tipo separato. Ad esempio, posso dichiarare che un metodo accetta un HAlignment
parametro, anziché un numero intero. Il codice non verrà quindi compilato se fornisco altro che uno dei tre possibili valori di allineamento. Tuttavia, gli enumeri di C non sono ben incapsulati e le costanti di enum possono essere usate in modo intercambiabile con gli interi. Altre lingue sono più rigorose qui.
In JavaScript, non otteniamo nessuno di questi vantaggi. L'esempio dato dichiara un oggetto che viene trattato come un enum. Ciò presenta alcuni vantaggi per il programmatore, ad esempio semplifica la documentazione, raggruppa tutte le "costanti" in un singolo oggetto, ... Tuttavia, è solo una convenzione che un tale oggetto è simile all'enum.
Il punto qui è che l'HTML ha solo un insieme finito e noto di tag. Puoi guardare le specifiche HTML5 e inserire quei nomi di elementi come enum nel tuo codice, e quindi rendere più difficile intrufolare un <blink>
tag nel tuo programma. È meglio codificare questa conoscenza in un posto che sporcare il codice con letterali stringa speciali (o peggio, numeri magici).