version 6.0
Case of...Else...End case による制御フロー構造の正式な構文は以下のようになります。
Case of : (ブール式) スートメント : (ブール式) スートメント . . . : (ブール式) スートメント Else スートメント End case
注:Else 部分は、オプションであり省略し、以下のように記述できます。
Case of : (ブール式) スートメント : (ブール式) スートメント . . . : (ブール式) スートメント End case
If...Else...End if 構造同様に、Case of...Else...End case 構造もメソッドに分岐の流れを与えます。
If...Else...End if 構造との違いは、Case of...Else...End case 構造は合理的に、必要なだけのブール式を評価し、ただ一つTRUEとなるステートメントのみを実行することです。
それぞれのブール式の前にはコロン (:) を付けます。この組み合わせ (コロンとブール式) をケースと呼びます。例えば以下の行はケースです。
: (bValidate=1)
最初にTRUEになったケースの後のステートメントだけを実行します。TRUEになるケースがない場合、ステートメントを何も実行しません (Else 文が指定されていない場合) 。
最後のケースの後にElse 文を含むことができます。すべての選択式がFALSEの場合に、Else 文の後のステートメントを実行します。
例
下記の例は数値変数を判定し、対応する数字をアラートボックスに表示します。
Case of
: (vResult = 1) ` 数値が1の場合
ALERT ("一です") ` 1の場合のアラートボックス表示
: (vResult = 2) ` 数値が2の場合
ALERT ("二です") ` 2の場合のアラートボックス表示
: (vResult = 3) ` 数値が3の場合
ALERT ("三です") ` 3の場合のアラートボックス表示
Else ` 数値が1,2,3のいずれでもない場合
ALERT ("一、二、三のいずれでもありません")
End case
比較するために、同じことをIf...Else...End if 構文で記述すると以下のようになります。
If (vResult = 1) ` 数値が1の場合
ALERT ("一です") ` 1の場合のアラートボックス表示
Else
If (vResult = 2) ` 数値が2の場合
ALERT ("二です") `2の場合のアラートボックス表示
Else
If (vResult = 3) ` 数値が3の場合
ALERT ("三です") ` 3の場合のアラートボックス表示
Else ` 数値が1,2,3のいずれでもない場合
ALERT ("一、二、三のいずれでもありません")
End if
End if
End if
Case of...Else...End case 構造の場合には、最初にTRUEになったケースだけを実行します。2つ以上のケースがTRUEの場合は、最初にTRUEになったケースの後のステートメントだけを実行します。
したがって、階層的なテストを実行するときには、階層上で低い位置にある条件がテスト順序ではじめに記述されていることを確認する必要があります。以下の例では、条件1のテスト表記は、条件1と条件2のテスト表記をカバーするので、テスト順序の最後に位置すべきです。次のコードでは最後の条件が検出されることはありません。
Case of : (vResult = 1) ... `スートメント : ((vResult = 1) & (vCondition#2)) `このケースは判定されない ... `スートメント End case
上記の例では、vResult = 1により他の条件を見る前に分岐するので、第2の条件の表記は判定されません。コードが正しく実行されるためには次のように書きます。
Case of : ((vResult = 1) & (vCondition#2)) `このケースが最初に判定される ... `スートメント : (vResult = 1) ... `スートメント End case .
さらに階層的なテストを実行したい場合、階層コードを使用する必要があります。
Tip:分岐の中で、ケースに続くステートメントなしで記述することができます。
Case of : (ブール式) : (ブール式) . . . : (ブール式) スートメント Else スートメント End case
または
Case of : (ブール式) : (ブール式) スートメント . . . : (ブール式) スートメント Else End case
または
Case of Else スートメント End case
参照
For...End for, If...Else...End if, Repeat...Until, While...End while, 制御フロー.