4D v16.3

Case of...Else...End case

ホーム

 
4D v16.3
Case of...Else...End case

Case of...Else...End case  


 

 

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) ` 数値が1の場合
       ALERT("一です") ` 1の場合のアラートボックス表示
    :(vResult=2) ` 数値が2の場合
       ALERT("二です") ` 2の場合のアラートボックス表示
    :(vResult=3) ` 数値が3の場合
       ALERT("三です") ` 3の場合のアラートボックス表示
    Else ` 数値が1,2,3のいずれでもない場合
       ALERT("一、二、三のいずれでもありません")
 End case

比較するために、同じことを 構文で記述すると以下のようになります。

 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
    :(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



参照 

For...End for
If...Else...End if
Repeat...Until
While...End while
制御フロー

 
プロパティ 

プロダクト: 4D
テーマ: プログラミング言語の構成要素

 
履歴 

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)