CASE 文

構文

BEGIN CASE
   CASE expression      statements   [ CASE expression      statements         .
         .
         .                ]
END CASE

説明

CASE 文を使用すると、1 つ以上の式の値に応じて、命令を実行する順序を変えることができます。 最初の CASE 文の expression が真の場合、それ以降の文から次の CASE 文までが実行されます。そのあと、END CASE 文の次の文に制御が移ります。

1 番目の CASE 文の式が偽である場合は、次の CASE 文の式をテストすることで処理が続行します。この CASE 文の式が真であれば、その次の CASE 文の直前までの文が実行されます。次の CASE 文がない場合は、END CASE 文の直前までの文が実行されます。 そのあと、END CASE 文の次の文に制御が移ります。

複数の CASE 文の式が真である場合でも、最初に真と評価された CASE 文の後続文だけが実行されます。 すべての CASE 文が偽である場合、BEGIN CASE 文と END CASE 文の間にある文は一切実行されません。

式が NULL 値と評価された場合、その CASE 文は偽とみなされます。

変数の値が NULL 値かどうかをテストする場合、ISNULL 関数と CASE 文を一緒に使用します。これが、NULL 値をテストする唯一の方法です。それは、NULL が、自身を含めてどのような値とも同等であることがないからです。 構文は次のようになります。

CASE ISNULL (expression)

その他の CASE 式のいずれも真と評価されない場合、定数「1」の式を使用して、実行するデフォルトの CASE を指定します。

次の例では、NUMBER に 3 が割り当てられていますが、CASE 1 が常に真となるため、制御がサブルーチン 30 に移ります。サブルーチンの RETURN 文が実行されると、制御は END CASE 文の次の文に移ります。

NUMBER=3
BEGIN CASE
   CASE NUMBER=1
      GOTO 10
   CASE 1
      GOSUB 30
   CASE NUMBER<3
      GOSUB 20
END CASE
PRINT 'STATEMENT FOLLOWING END CASE'
GOTO 50
10*
PRINT 'LABEL 10'
STOP
20*
PRINT 'LABEL 20'
RETURN
30*
PRINT 'LABEL 30'
RETURN
50*

次のプログラム出力が得られます。

LABEL 30
STATEMENT FOLLOWING END CASE

以下の例では、「NAME」が条件のいずれも満たさないため、制御は END CASE の次の文に進みます。

NAME="MICHAEL"
BEGIN CASE
   CASE NAME[1,2]='DA'
      PRINT NAME
      GOTO 10
   CASE NAME[1,2]='RI'
      PRINT NAME
      GOSUB 20
   CASE NAME[1,2]='BA'
      PRINT NAME
      GOSUB 30
END CASE
PRINT 'NO MATCH'
STOP

次のプログラム出力が得られます。

NO MATCH