Le enumerazioni non hanno nulla a che fare con OOP e JavaScript non ha enumerazioni. Invece, le enumerazioni vengono utilizzate ogni volta che è possibile scegliere tra un insieme fisso di valori. Ad esempio, un booleano è una scelta tra true e false, che potrebbe essere implementata come enum Bool { False, True }
. In una libreria della GUI, potremmo avere un enum per gli allineamenti: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Di solito è irrilevante il modo in cui l'enum viene implementato, la parte importante è che ogni possibile valore è distinto. Molte lingue usano interi per le enumerazioni, sebbene alcuni come Java supportino oggetti arbitrari.
Fino ad ora, avremmo potuto usare anche le costanti, ad es. %codice%. Tuttavia, un compilatore sa che i valori enum appartengono insieme. Quindi, quando cambio i valori enum const int LEFT = -1, CENTER = 0, RIGHT = 1
, il compilatore può avvisarmi che ho dimenticato il caso switch(value) {case LEFT: ...; case RIGHT: ...;}
. Questo può essere un sostanziale risparmio di tempo. Nelle lingue senza enumerazione o senza un costrutto switch-case, questo può essere simulato con il pattern Visitor, sebbene ciò sia più utile in presenza di tipizzazione statica.
L'altro vantaggio è che le enumerazioni possono essere trattate come un tipo separato. Per esempio. Posso dichiarare che un metodo accetta un parametro CENTER
, piuttosto che un numero intero. Il codice non riuscirà quindi a compilare se fornisco qualcosa tranne uno dei tre possibili valori di HAlignment. Tuttavia, le enumerazioni di C non sono ben incapsulate e le costanti di enum possono essere utilizzate in modo intercambiabile con gli interi. Altre lingue sono più rigide qui.
In JavaScript, non otteniamo nessuno di questi vantaggi. L'esempio indicato dichiara un oggetto che viene considerato come enumerazione. Questo ha alcuni vantaggi per il programmatore, ad es. facilita la documentazione, raggruppa tutte le "costanti" in un singolo oggetto, ... Tuttavia, è solo una convenzione che tale oggetto è simile all'enum.
Il punto qui è che HTML ha solo un insieme finito e conosciuto di tag. Puoi guardare le specifiche HTML5 e inserire questi nomi di elementi come enum nel tuo codice, e quindi rendere più difficile introdurre un tag HAlignment
nel tuo programma. È meglio codificare questa conoscenza in un unico posto in cui copiare il codice con speciali string letterali (o peggio, numeri magici).