Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。8.2には、列挙型の利用における機能強化もあります。列挙型とはenum型とも呼ばれ、列挙子と呼ばれる特定の値のみを所持することのできる型です。8.1でサポートされた列挙型を紹介しておきます。8.1でサポートされました。列挙型のサポートされていないバージョンでは、定数を使って列挙子のようなものを定義するか、列挙型のようなクラスを作成していました。いずれも、以下のリストのように列挙子を個別に定義し、値を重複しないように割り振っていく必要があります。3この方法には、それぞれ問題があります。グローバルな定数では、どの列挙子がどの列挙体(のようなもの)に属するのかということ、また割り振る値が重複しないようにすることは、プログラマが管理しなければなりません。クラスではスコープが利用できますが、やはり割り振る値は重複しないように、プログラマが管理しなければなりません。列挙体では、上記のような定義は以下のリストのように置き換えることができます。CREATURE::INSECT->text());実行結果は、下記です。昆虫(1)のように、クラスの宣言と同様の構文で、enumキーワードによって列挙体を宣言できます。(2)以降で、caseキーワードで個々の列挙子を定義します。このとき、具体的な値は不要であることに注意してください。(3)のように、列挙体ではクラスと同様にメソッドを定義できます。メソッド内部では、自分自身を表す$thisが使えるのもクラスと同じです。(4)以降に、呼び出しのコードも示しています。定義したメソッドtextの呼び出しの他に、既定で使えるnameプロパティを参照して列挙子の名前を取得することも可能です。Enum)も使用できます。この場合は、列挙子の型と値を明示することになります。以下のリストでは、上記の列挙体CREATUREを値に依存した列挙型CREATURE_BACKEDとして定義し直しています。実行結果は、CREATUREの例と同じです。CREATURE_BACKED::INSECT->value);(1)の列挙型CREATURE_BACKEDでは、型としてstringを指定しています。(2)のcaseキーワードで個々の列挙子を定義するのも同じですが、ここでは値を明示しています。(3)の呼び出しのコードでは、valueプロパティを参照して値を取得しています。このvalueプロパティも既定で使用できますが、値に依存した列挙型でのみ使用可能となっています。8.2では、定数式の中で、列挙体のプロパティを使えるようになりました。以下のリストのように定数の値を列挙子のプロパティで定義できます。"動物""ここでは、nameプロパティとvalueプロパティをそれぞれ使用し、列挙子の名前と値を定数の値としています。同様に、列挙体に定義したメソッドの呼び出しも使うことができます。