Select Caseステートメントの構文と例
Select Caseステートメントは、ある値を分類し、その分類に応じて実行する処理を分岐させるための構文です。 構文の形式は次の通りです。 [ ]
でくくった部分は省略することが可能な箇所です。
Select Caseステートメントを使った具体例を挙げると次のようになります。
Select Caseステートメント内で記述されるCase 値
のうち、いずれかに一致するものがあればそのCase以下のステートメントが実行されます。 Case
で分類する値はカンマ,
で区切ることにより複数記述することができます。 この場合、どれか1つでも一致する値があれば、そのCase以下のステートメントが実行されます。 Case Else
の部分は、値がどの分類にも当てはまらなかった場合に実行されます。
フォールスルー
Select Caseステートメントでは、どこか一箇所でも一致する分類があった場合は、それ以降は他の分類と一致するかどうかの評価はされません。 つまり、VB.NETのCaseでは、Cなどのcaseラベルとは異なりフォールスルーしません。 複数のCaseで同じ値を記述することはできますが、実行されるステートメントは最初に一致する値が見つかった箇所だけとなります。
具体例を挙げると次のようになります。 次のコードは、1から10までの数値について、(奇数ではなく)素数か偶数かに分類するものです。
この実行結果から分かるとおり、偶数でも素数でもある2はただ単に「素数である」とだけ表示され、「偶数である」とは表示されません。
Caseの省略
Select Caseステートメントは、Caseを省略して単にSelect
と記述することもできます。 従って、次の二つのSelectステートメントはどちらも同等のものとなります。
文字列の分類
Select Caseステートメントでは数値だけでなく文字列の分類にも使うことができます。
Case句と条件式
Case句では分類したい値をカンマで区切る他にも条件式を記述することができます。 値がある範囲にあるかどうかで分類したい場合はTo
を使うことができます。 例えばX以上Y以下の範囲の値を分類したい場合はX To Y
と記述します。
比較演算子を使って値を分類したい場合は、To
の代わりにIs
を使うことができます。 例えばX未満の値を分類したい場合はIs < X
と記述します。 同様に、X以外の値を分類したい場合はIs <> X
と記述します。 分類条件はCase句が記述されている順(上から順)に評価されるため、複雑な条件を記述する場合は注意が必要です。
To
やIs
を使った条件式も、カンマで区切ることにより1つのCase句で複数個記述することができます。 ただし、カンマで区切った場合は条件式は左から順に評価され、かつショートサーキットによる評価が行われる点に注意が必要です。 つまり、1つのCase句に複数個の条件式が記述されていて、なおかつその途中に一致する条件式があった場合は、それ以降の条件式は評価されません。
さらに、To
やIs
では範囲に具体的な数値を指定する代わりに、変数や定数を指定することもできます。
Case句でメソッドを呼び出し、その戻り値をもとに分類することもできます。 以下の例はCase句でメソッドを呼び出す例ですが、このようなSelect Caseステートメントの使用法は読みやすさ・分かりやすさの観点から言えば推奨できるものではありません。 あくまでこういった使用法もできるという1つの例であり、このような場合はSelect CaseではなくIf Elseを使用すべきです。
Exit Selectステートメント
Case句による分類後に処理を中断してSelectステートメントから脱出するには、Exit Selectステートメントを使います。
他のCase句へのジャンプ
C#のswitch文ではgoto caseやgoto defaultを使うことで他のラベル(Case句)へジャンプすることができますが、VBではそれに相当する構文は用意されていません。 代わりに通常のGoToステートメントを使用し、他のCase句に設定したラベルへとジャンプさせます。