Case of...Else...End caseによる制御フロー構造の正式な構文は以下のようになります。
Case of
:(Boolean_Expression)
statement
:(Boolean_Expression)
statement
.
.
.
:(Boolean_Expression)
statement
Else
statement
End case
注:Else 部分は、オプションであり省略し、以下のように記述できます。
Case of
:(Boolean_Expression)
statement
:(Boolean_Expression)
statement
.
.
.
:(Boolean_Expression)
statement
End case
構造同様に、Case of...Else...End case構造もメソッドに分岐の流れを与えます。
構造との違いは、Case of...Else...End case構造は合理的に、必要なだけのブール式を評価し、ただ一つTRUEとなるステートメントのみを実行することです。
それぞれのブール式の前にはコロン (:) を付けます。この組み合わせ (コロンとブール式) をケースと呼びます。例えば以下の行はケースです。
:(bValidate=1)
最初にTRUEになったケースの後のステートメントだけを実行します。TRUEになるケースがない場合、ステートメントを何も実行しません (Else 文が指定されていない場合) 。
最後のケースの後にElse 文を含むことができます。すべての選択式がFALSEの場合に、Else 文の後のステートメントを実行します。
下記の例は数値変数を判定し、対応する数字をアラートボックスに表示します。
Case of
:(vResult=1)
ALERT("一です")
:(vResult=2)
ALERT("二です")
:(vResult=3)
ALERT("三です")
Else
ALERT("一、二、三のいずれでもありません")
End case
比較するために、同じことを 構文で記述すると以下のようになります。
If(vResult=1)
ALERT("一です")
Else
If(vResult=2)
ALERT("二です")
Else
If(vResult=3)
ALERT("三です")
Else
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
:(Boolean_Expression)
:(Boolean_Expression)
.
.
.
:(Boolean_Expression)
statement
Else
statement
End case
または
Case of
:(Boolean_Expression)
:(Boolean_Expression)
statement
.
.
.
:(Boolean_Expression)
statement
Else
End case
または
Case of
Else
statement
End case