Enum型は様々な場面で使用するのでこの変換を理解しているかなり便利です。
これをマスターしていれば仕様変更に強く、メンテナンス性の高いプログラムを作ることができます。
具体的にどういった使い方をしているかについても、解説に記載しておきます。ご参考ください。
プログラム
'■要素名をStringで取得
Dim name As String = Italian.Aperitivo.ToString()
'■値の取得
Dim value As Integer = Italian.Stuzzino
'■要素名のリストを取得
Dim names As String() = [Enum].GetNames(GetType(Italian))
'■値のリストを取得
Dim values As Integer() = [Enum].GetValues(GetType(Italian))
'■要素名(String)→Enum型の取得
Dim stringName As String = "SecondPiat"
Dim stringCast As Italian = DirectCast([Enum].Parse(GetType(Italian), stringName), Italian)
'■値(Integer)→Enum型の取得
Dim intValue As Integer = 6
Dim intCast As Italian = intValue
'■値(Integer)→要素名(String)の取得
Dim intValue2 As Integer = 7
Dim stringCast2 As String = [Enum].GetName(GetType(Italian), intValue2)
次にEnumの作成例です。
Enum Italian
Aperitivo = 1
Stuzzino = 2
Antipasto = 3
PrimoPiat = 4
SecondPiat = 5
Contrno = 6
Formage = 7
Dolce = 8
Digestivo = 9
End Enum
解説
個人的に一番多いパターンとしては、データベースのフラグ情報との紐付けです。
Enum型を使うことで、お客さまの業務に変更があり、システム改造をする際にも最小限の修正と、バグ発生率を抑制することができます。
具体的には販売システムなどで状態フラグ「受注、売上、請求」という流れがあった場合、次のようにEnum型で宣言しておきます。またデータベースの例も記載しておきます。
Enum 状態
受注 = 0
売上 = 1
請求 = 2
End Enum
データベースでは次のようにデータを保持しておきます。
注文ID | 商品名 | 状態 | 個数 | 金額 |
1 | 商品A | 2 | 2 | ¥1,000 |
2 | 商品B | 1 | 3 | ¥1,200 |
3 | 商品A | 1 | 2 | ¥1,000 |
4 | 商品C | 0 | 2 | ¥900 |
注文ID1は既に請求済み、注文ID2、3は売上済みだが請求はされていない。注文ID4はまだ受注段階といった感じです。
この状態から、お客さまにこう言われます。
お客さま
ぎんつば君、このシステムで配車中も管理したいな。
実は配車状態って受注と売上の間にあるだよ。
こういった場面でもやることは2つだけ。
- 状態クラスに配車を追加して、売上と請求の数字に1プラスする
- データベースの状態列に、1の場合は2に、2の場合は3にするUpdate文を実行する
Enum 状態
受注 = 0
配車 = 1
売上 = 2
請求 = 3
End Enum
注文ID | 商品名 | 状態 | 個数 | 金額 |
1 | 商品A | 3 | 2 | ¥1,000 |
2 | 商品B | 2 | 3 | ¥1,200 |
3 | 商品A | 2 | 2 | ¥1,000 |
4 | 商品C | 0 | 2 | ¥900 |
あとは新しく追加となった配車処理を実装すれば終わりです。
Enum型を使っていない場合は、売上、請求の処理を全部チェックして、if文やFor文の条件式に状態を使用している場所を改造する、というとても面倒なお仕事が待っています。
改造したプログラムは必ずテストをしないといけないし、触ったってことは確実にバグ発生率が上がります。
いやですよね。笑
コメント