Енуми не мають нічого спільного з OOP, а JavaScript не має перерахунків. Натомість перерахунки використовуються, коли є вибір між фіксованим набором значень. Наприклад, булевий вибір - це вибір між істинним і хибним, який може бути реалізований як enum Bool { False, True }
. У бібліотеці GUI, ми могли б мати перерахування для вирівнювання: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Зазвичай не має значення як реалізація перерахунку, важливою частиною є те, що кожне можливе значення є виразним. Багато мов використовують цілі числа для перерахунків, хоча деякі, як Java, підтримують довільні об'єкти.
До цього часу ми могли так само добре використовувати константи, наприклад const int LEFT = -1, CENTER = 0, RIGHT = 1
. Однак компілятор знає, що значення enum належать разом. Тож коли я переключаю значення enum switch(value) {case LEFT: ...; case RIGHT: ...;}
, компілятор може попередити мене, що я забув CENTER
випадок. Це може бути значною економією часу. Мови без перерахунків або без конструкції корпусу комутатора це можна змоделювати за допомогою Шаблона відвідувачів, хоча це корисніше за наявності статичного набору тексту.
Інша перевага полягає в тому, що до енумів можна трактувати як окремий тип. Наприклад, я можу заявити, що метод приймає HAlignment
параметр, а не будь-яке ціле число. Код не вдасться скомпілювати, якщо я надаю щось, крім одного з трьох можливих значень HAlignment. Однак перерахунки С недостатньо інкапсульовані, і константи перерахунків можуть використовуватися взаємозамінно з цілими числами. Інші мови тут суворіші.
У JavaScript ми не отримуємо жодної з цих переваг. Наведений приклад оголошує об’єкт, який трактується як перерахунок. Це має деякі переваги для програміста, наприклад, це полегшує документування, групує всі "константи" в один об'єкт, ... Однак це лише умова про те, що такий об’єкт є перелічуваним.
Суть у тому, що HTML має лише обмежений та відомий набір тегів. Ви можете подивитися специфікацію HTML5 і ввести ці імена елементів як перерахунок у свій код, а тому ускладнить <blink>
проникнення тегу до вашої програми. Краще кодувати ці знання в одному місці, щоб засмітити свій код спеціальними рядковими буквами (або ще гірше, магічними числами).