Wyliczenia nie mają nic wspólnego z OOP, a JavaScript nie ma wyliczeń. Zamiast tego, wyliczenia są używane zawsze, gdy istnieje wybór między ustalonym zestawem wartości. Na przykład wartość logiczna to wybór między prawdą a fałszem, którą można zaimplementować jako enum Bool { False, True }
. W bibliotece GUI, możemy mieć enum do trasowania: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Zazwyczaj nie ma znaczenia, w jaki sposób wyliczanie jest realizowane, ważne jest to, że każda możliwa wartość jest odrębna. Wiele języków używa liczb całkowitych do wyliczania, choć niektóre takie jak Java obsługują dowolne obiekty.
Do tej pory równie dobrze moglibyśmy używać stałych, np const int LEFT = -1, CENTER = 0, RIGHT = 1
. Jednak kompilator wie, że wartości wyliczenia należą do siebie. Kiedy więc przełączam wartości wyliczania switch(value) {case LEFT: ...; case RIGHT: ...;}
, kompilator może ostrzec mnie, że zapomniałem CENTER
przypadku. Może to być znaczna oszczędność czasu. W językach bez wyliczeń lub bez konstrukcji ze skrzynką przełączającą można to symulować za pomocą Wzorca gościa, chociaż jest to bardziej pomocne w przypadku pisania statycznego.
Inną zaletą jest to, że wyliczenia można traktować jako osobny typ. Na przykład mogę zadeklarować, że metoda przyjmuje HAlignment
parametr, a nie liczbę całkowitą. Kod nie zostanie skompilowany, jeśli podam cokolwiek oprócz jednej z trzech możliwych wartości HAlignment. Jednak wyliczenia C nie są dobrze enkapsulowane, a stałych wyliczeniowych można używać zamiennie z liczbami całkowitymi. Inne języki są tutaj surowsze.
W JavaScript nie otrzymujemy żadnej z tych korzyści. Podany przykład deklaruje obiekt traktowany jako wyliczenie. Ma to pewne zalety dla programisty, np. Ułatwia dokumentację, grupuje wszystkie „stałe” w jeden obiekt…. Jednak jest to tylko konwencja, że taki obiekt jest podobny do enum.
Chodzi o to, że HTML ma tylko skończony i znany zestaw tagów. Możesz spojrzeć na specyfikację HTML5 i umieścić te nazwy elementów jako wyliczenia w kodzie, a tym samym utrudnić wykrycie <blink>
znacznika w swoim programie. Lepiej zakodować tę wiedzę w jednym miejscu, aby zaśmiecać kod specjalnymi literałami ciągów (lub, co gorsza, magicznymi liczbami).