列番号や連番を管理する時に列挙型(Enum)を使うことがしばしばあります。
その時の挙動が妙だったのでメモしておきます。
#パターン1
Private Enum eTEST
a
b
c
d
End Enum
要素の値は以下のようになります。
a ⇒ 0
b ⇒ 1
c ⇒ 2
d ⇒ 3
列挙体は指定がなければ0から順にインクリメントします。
#パターン2
Private Enum eTEST
a = 1
b = 2
c = 3
d = 4
End Enum
要素の値は以下のようになります。
a ⇒ 1
b ⇒ 2
c ⇒ 3
d ⇒ 4
要素を指定した場合はそれぞれ指定した値になります。
#パターン3
Private Enum eTEST
a = 1
b = 2
c
d = 3
e
f = 4
g
End Enum
要素の値は以下のようになります。
a ⇒ 1
b ⇒ 2
c ⇒ 3
d ⇒ 3
e ⇒ 4
f ⇒ 4
g ⇒ 5
c に指定がない場合、一つ前の b の数にインクリメントします。
その次の d は指定しているので値は 3 になります。
「指定がないと上の要素にインクリメントして設定する」というルールのようです。
#パターン4
Private Enum eTEST
a = 1
b = 2
c
d = 3
e
f = b ☜ここ
g
End Enum
上記のように別の要素を割り当てると、要素の値は以下のようになります。
a ⇒ 1
b ⇒ 2
c ⇒ 3
d ⇒ 3
e ⇒ 4
f ⇒ 2 ☜
g ⇒ 3 ☜
こんな感じの書き方もできるみたいです。
(どんな場面で使うんだろう)
#まとめ
可読性が下がるんで、
Enumには値を指定せずに自動でインクリメントさせたほうがいいなと思いました。