SELECT CASE 構文

CASE 構文は、実行対象となる多くのステートメント・ブロック の中から 1 つを選択するための簡潔な構文を持っています。 各 CASE ステートメントのケース・セレクター は、SELECT CASE ステートメントのケース式と似ています。



>>-SELECT_CASE_statement---------------------------------------><
 
 
>>-+--------------------------+--------------------------------><
   | .----------------------. |
   | V                      | |
   '---CASE_statement_block-+-'
 
 
>>-END_SELECT_statement----------------------------------------><
 
 

SELECT_CASE_statement
評価対象のケース式を定義します。 構文の詳細については、SELECT CASEを参照してください。

END_SELECT_statement
CASE 構文を終了します。 構文の詳細については、END (構文)を参照してください。

CASE_statement_block



>>-CASE_statement----------------------------------------------><
 
 
>>-statement_block---------------------------------------------><
 
 

CASE_statement
値、値のセット、またはデフォルト・ケースのいずれかで、 後続のステートメント・ブロックが実行されるケース・セレクターを定義します。 構文の詳細については、CASEを参照してください。

構文内では、各ケース値の型は、ケース式の型と同じでなければなりません。

CASE 構文は、次のように実行されます。

  1. ケース式が評価されます。 結果値は、ケース指標です。
  2. ケース指標は、各 CASE ステートメントの case_selector と比較されます。
  3. 一致すると、CASE ステートメントに関連したステートメント・ブロックが実行されます。 一致しなければ、どのステートメント・ブロックも実行されません。 (CASEを参照してください。)
  4. 構文の実行が完了すると、制御が END SELECT ステートメントの後に移されます。

CASE 構文には、それぞれに値の範囲を 1 つ指定できるゼロ個以上の CASE ステートメントが入ります。 ただし、CASE ステートメントで指定する値の範囲をオーバーラップさせることはできません。

複数の CASE ステートメントのうちの 1 つで、デフォルトの case_selector を指定することができます。 デフォルトの CASE_statement_block は、CASE 構文の始め、構文の終わり、あるいは他のブロックの間など、 構文内ならどこにあってもかまいません。

構文名を指定する場合、SELECT CASE ステートメントおよび END SELECT ステートメントには 必ず指定が必要ですが、CASE ステートメントへの指定はオプションとなります。

CASE 構文内からは、END SELECT ステートメントに対してのみ分岐できます。 CASE ステートメントは分岐ターゲットにはなれません。



マイグレーションのためのヒント:

IF ブロックの代わりに CASE
使用します。

FORTRAN 77 ソース

       IF (I .EQ.3) THEN
            CALL SUBA()
       ELSE IF (I.EQ. 5) THEN
            CALL SUBB()
       ELSE IF (I .EQ. 6) THEN
            CALL SUBC()
       ELSE
            CALL OTHERSUB()
       ENDIF
       END

Fortran 90 または Fortran 95 ソース

        SELECTCASE(I)
          CASE(3)
            CALL SUBA()
          CASE(5)
            CALL SUBB()
          CASE(6)
            CALL SUBC()
          CASE DEFAULT
            CALL OTHERSUB()
        END SELECT
        END

      ZERO: SELECT CASE(N)
 
        CASE DEFAULT ZERO
             OTHER: SELECT CASE(N) ! start of CASE construct OTHER
                CASE(:-1)
                   SIGNUM = -1     ! this statement executed when n<=-1
                CASE(1:) OTHER
                    SIGNUM = 1
             END SELECT OTHER      ! end of CASE construct OTHER
        CASE (0)
          SIGNUM = 0
 
      END SELECT ZERO
      END
IBM Copyright 2003