列挙子を的確に活用することでソースコードの解読性って向上しますよね!?

そこで、AB5ではより高機能な列挙型機能を提供していきたいと思います。まず、AB4に搭載されているEnumステートメントですが、C/C++同様の単なる整数の置き換えだけに過ぎません。当然、定数の右辺値として利用できたりと多様な参照方法があるので便利といえば便利ですが、例えば、Long型にもInteger型にも簡単に代入できてしまうのは欠点です。折角意味のある構造で列挙子を定義しているのですから、意図しない型への代入は避けるべきだと考えるのが筋です。

そこで、AB5では列挙型をEnumBaseから派生するクラスとして捉え、列挙子はそのクラスのインスタンスという扱いにしていこうと思います。

こうすることで、異なる列挙型間のキャストに規制がかかり、各列挙子の意味が明確になります。

また、定数としてしか評価できなかった従来法と異なり、プログラム内から列挙子の名前を取得できるようになるなどのメリットが生じます。例えば、Select文で数値を元に分岐を行い、それに対応する文字列を表示するなどの処理がEnumBaseを継承することで一行で済んだりします。

Enum Test
    a
    b
End Enum

Dim e As Test
e=Test.a

Select Case e
    Case a
        Print "a"
    Case b
        Print "b"
End Select

このようなソースコードは下記のように書き直すことができるようになるというワケです。スッキリ!

Enum Test
    a
    b
End Enum

Dim e As Test
e=Test.a

Print e.ToString()