EnumはOOPとは関係がなく、JavaScriptにはenumがありません。代わりに、値の固定セットの選択肢がある場合は常に列挙型が使用されます。たとえば、ブール値はtrueとfalseの間の選択で、として実装できますenum Bool { False, True }
。GUIライブラリーには、アライメントの列挙型がある場合がありますenum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
。
通常、enumの実装方法は関係ありません。重要な部分は、可能な値がそれぞれ異なることです。Javaなどの一部の言語は任意のオブジェクトをサポートしていますが、多くの言語は列挙型に整数を使用しています。
これまでは、定数などを使用することもできましたconst int LEFT = -1, CENTER = 0, RIGHT = 1
。ただし、コンパイラーは列挙値が一緒に属することを知っています。したがって、列挙値を切り替えるswitch(value) {case LEFT: ...; case RIGHT: ...;}
と、コンパイラは、CENTER
ケースを忘れたことを警告できます。これにより、大幅に時間を節約できます。列挙型またはswitch-caseコンストラクトのない言語では、Visitor Patternを使用してこれをシミュレートできますが、静的型付けが存在する場合に役立ちます。
もう1つの利点は、列挙型を別の型として扱うことができることです。たとえば、メソッドがHAlignment
整数ではなくパラメータを取ることを宣言できます。3つの可能なHAlignment値の1つ以外を指定すると、コードはコンパイルに失敗します。ただし、Cの列挙型はカプセル化されていないため、列挙型定数は整数と同じ意味で使用できます。他の言語はここでより厳密です。
JavaScriptでは、これらの利点はありません。与えられた例は、enumとして扱われるオブジェクトを宣言しています。これにはプログラマーにとっていくつかの利点があります。例えば、文書化を容易にし、すべての「定数」を単一のオブジェクトにグループ化します。ただし、そのようなオブジェクトが列挙型になっているのは単なる規則です。
ここでのポイントは、HTMLには有限の既知のタグセットしかありません。HTML5仕様を見て、それらの要素名を列挙型としてコードに入れることができます。そのため<blink>
、プログラムにタグを忍び込ませることがより困難になります。この知識を1つの場所にエンコードして、コードに特別な文字列リテラル(または、さらに悪いことに、マジックナンバー)を散らかす方がよいでしょう。