Enumの研究(1)
Enumの研究(1)
コードの可読性を上げる一つの方法として、
Enumを適切に使う
というものがある。
ずいぶん前からEnum自体は使っていたが、最近やっと適切な使い方が定まってきたように思うので、Enumについていろいろ実験したことを書き留めておく。
Enumの要素名がuniqueであるとき
長らく勘違いしていたのだが、Enumの要素名がuniqueである場合、定数のように単独で使うことができる。
なんでこんな簡単なことに気付かなかったのかというと、入門書とかに「xlContinuous
」の類のことが、
組み込み定数
と書いてあるのが原因だと思う。
Microsoftのリファレンスを検索したら、たとえば先の「xlContinuous
」の場合、「XlLinStyle
列挙体」とちゃんと書いてある。
「xlContinuous
」を「XlLineStyle.xlContinuous
」と書かなくてもよいのだから、自作のEnumだって要素名だけで定数のように使えるのは当り前なのだ。
リスト1 標準モジュール宣言セクション
Public Enum Hoge firstElement = 2 secondElement thirdElement fourthElement fifthElement End Enum
たとえば、このようにEnumを作る。
で、イミディエイト・ウインドウに
?firstElement
と打ち込んで、[Enter]を押すと、
このように、「2
」が出力される。
ちゃんと、「2
」を意味する定数として働いていることがわかる。
Enumの要素名が衝突しているとき
では、Enumの要素名が他のEnumの要素名と衝突していたらどうなるのだろうか。
リスト2 標準モジュール宣言セクション
Public Enum Hoge firstElement = 2 secondElement thirdElement fourthElement fifthElement End Enum Public Enum Foobar firstElement = 3 secondElement thirdElement fourthElement fifthElement End Enum
ご覧のように、新しいEnum「Foobar
」を作成し、先の「Hoge
」とほぼ同じ要素を持たせてみる。
このようにした上で、イミディエイト・ウインドウに先ほどと同じく
?firstElement
と打ち込んで[Enter]。
「firstElement
」だけでは、Enum「Hoge
」の「firstElement
」なんだかEnum「Foobar
」の「firstElement
」なんだか、コードを打ち込んだ本人にもわからないのだから、当然こうなる。
もちろん、たとえば
?Foobar.firstElement
としてやれば、
このように意図したとおりの結果は得られる。しかし、いちいちEnum名を指定しないといけないのではめんどくさいことこの上ない。
ひとまずのまとめ
ここまでをまとめると、
Enumの要素名はuniqueにすべし!
ということになる。
要素名の衝突を防ぐために、本家Microsoft Officeシリーズでは、
要素名に接頭辞を付ける
という対策をとっている。
これを真似しない手はない。
そこで、最近は、
要素名の先頭にEnum名の略語を添える
というやり方をしている。
たとえば、先のEnum「Hoge
」、「Foobar
」なら、次のようにするのである。
リスト3 標準モジュール宣言セクション
Public Enum Hoge hgFirstElement = 2 hgSecondElement hgThirdElement hgFourthElement hgFifthElement End Enum Public Enum Foobar fbFirstElement = 3 fbSecondElement fbThirdElement fbFourthElement fbFifthElement End Enum
これだけのことで、uniqueなEnum要素名が作りやすくなる。
今回はアホみたいなEnum名なので実感しにくいが、Enum名を役割明示的にして、略語もわかりやすいものにしておけば、コーディングが非常に楽になる。
おわりに
過去に書いたコードを見直してみて、Enumの使い方が我ながらめちゃくちゃだったので、書いてみました。
お役に立てれば幸いです。