Case of...Else...End case

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

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, 制御フロー.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次