よく、複数の値の「どれかに一致」を判定したいことがあります。
例えば、Excelのファイルを開くプログラムを作っているとします。Excelファイルの拡張子は、
- .xls
- .xlsx
- .xlsm
- .xlsb
があります。ユーザーが指定したファイルの拡張子が、このどれかに一致するかどうかを判定する必要があります。
そんな時の便利な書き方です。
ext を拡張子とします。
ext = IO.Path.GetExtension(filepath)
If
で条件を羅列する
まずは、最も単純な書き方です。
If (ext = ".xls") OrElse (ext = ".xlsx") OrElse (ext = ".xlsm") OrElse (ext = ".xlsb") Then
' 処理
End If
この書き方のメリットは 柔軟に記述できる ことです。例えば、「拡張子が ".xlsx", ".xlsm", ".xlsb" の時は filepath が "C:\" で始まっていないといけない」とします。
If (ext = ".xls") OrElse
(((ext = ".xlsx") OrElse (ext = ".xlsm") OrElse (ext = ".xlsb")) AndAlso (filepath.StartWith("C:\")) Then
' 処理
End If
と、柔軟に書くことができます。
デメリットは、条件を羅列するので 記述が冗長になり、可読性に欠ける ことです。
- メリット: 他の条件が関係する時に、柔軟に記述できる
- デメリット: 記述が冗長
Select Case
を用いる
次に、Select Case
構文を用いる方法です。Case
の後に複数の値を記述できる事を利用します。
Select Case ext
Case ".xls", ".xlsx", ".xlsm", ".xlsb"
' 処理
End Select
Select Case
構文を用いて、値を羅列する方法もあります。
この書き方のメリットは 記述が簡潔になる ことです。
デメリットは、Case
を一つしか用いないのに Select
~End Select
を書かなくてはいけないこと、また インデントが2段下がる ことです。
- メリット: 記述が簡潔になる
- デメリット:
Case
一つのためにSelect
~End Select
を書かなくてはいけない。インデントが2段下がる
配列のContains()
関数 を用いる
最後に、{}
で配列を作成してContains()
関数を用いる方法です。これがオススメの方法です。
If {".xls", ".xlsx", ".xlsm", ".xlsb"}.Contains(ext)
' 処理
End If
メリットは、値を羅列するので 記述が簡潔になる ことです。
デメリットは、一致する値を先に、判定する変数を後に書くため、コードと思考の順序が逆になり、慣れないと少し分かりにくい ことです。
- メリット: 記述が簡潔になる
- デメリット: 慣れないと少し分かりにくい
まとめ
以上、VB.NETで複数の値の「どれかに一致」を判定する方法、でした。 可読性の高さは、バグを減らし開発効率を上げるために大切なことです。
値がどれかに一致するかどうかを判定するケースは、よく出てきます。Contains()
関数を使った方法も、覚えておくと役に立つと思います。