Enum型を使いこなすための変換

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商品A22¥1,000
2商品B13¥1,200
3商品A12¥1,000
4商品C02¥900

注文ID1は既に請求済み、注文ID2、3は売上済みだが請求はされていない。注文ID4はまだ受注段階といった感じです。

この状態から、お客さまにこう言われます。

お客さま
お客さま

ぎんつば君、このシステムで配車中も管理したいな。

実は配車状態って受注と売上の間にあるだよ。

こういった場面でもやることは2つだけ。

  • 状態クラスに配車を追加して、売上と請求の数字に1プラスする
  • データベースの状態列に、1の場合は2に、2の場合は3にするUpdate文を実行する
Enum 状態
    受注 = 0
    配車 = 1
    売上 = 2
    請求 = 3
End Enum
注文ID商品名状態個数金額
1商品A32¥1,000
2商品B23¥1,200
3商品A22¥1,000
4商品C02¥900

あとは新しく追加となった配車処理を実装すれば終わりです。

Enum型を使っていない場合は、売上、請求の処理を全部チェックして、if文やFor文の条件式に状態を使用している場所を改造する、というとても面倒なお仕事が待っています。

改造したプログラムは必ずテストをしないといけないし、触ったってことは確実にバグ発生率が上がります。

いやですよね。笑

コメント

タイトルとURLをコピーしました