SELECTCASE¶
| 関数名 | 引数 | 戻り値 |
|---|---|---|
SELECTCASE | any | なし |
CASE | any | なし |
CASEELSE | なし | なし |
ENDSELECT | なし | なし |
API
SELECTCASE anyValue
CASE anyValue(, anyValue...)
CASEELSE
ENDSELECT
IF構文と似ていますが、SELECTCASEは1つの値を元に複数の行へ分岐する構文です。SELECTCASEに指定した引数の値によって分岐します。 もっとも単純な使用法は以下のようになります。 SELECTCASE X
CASE 1
PRINTL Xは1です。
CASE 3
PRINTL Xは3です。
CASEELSE
PRINTL Xは1でも3でもありません。
ENDSELECT
このスクリプトはXの値によって分岐します。
SELECTCASE文が実行された時、Xが1であればCASE 1の行に飛び、次のCASEまたはCASEELSEまでの行を実行します。
同様にXが3であればCASE 3に飛びます。
Xの値に対応するCASE文がない時、CASEELSE文があればそこに飛びます。なければENDSELECTに飛びます。
Cなどのswitch文と異なり、1つのCASEから次のCASEに流れ落ちることはありません。
また、BREAK文でENDSELECTに飛ぶことはできません。
なお、GOTO等の命令で直接SELECTCASE~CASE~CASEELSE~ENDSELECT内に入った場合、IF~ELSEIF~ELSE~ENDIFと同様に
CASE、CASEELSE、ENDSELECTの直前まで通常通り実行したあとに、ENDSELECTの次の行へ飛び処理を続行します。
CASEの条件式には3種類の書式があります。
1つは上記のように値を直接指定する方法、2つ目はIS <演算子> <数式>、3つめは<数式> TO <数式>です。
IS <演算子> <数式>の場合、例えばIS <= 30であればXが30以下の場合、CASE以下が実行されます。
<数式> TO <数式>の場合、例えば10 TO 20であればXが10以上20以下の場合、CASE以下が実行されます。
また、CASEには複数の条件式をカンマで区切って指定することができます。
これらを利用して例えば以下のように書くことができます。
SELECTCASE X
CASE 1
PRINTL Xは1です。
CASE 2,3
PRINTL Xは1ではありません。
PRINTL Xは2か3です。
CASE 10 TO 20
PRINTL Xは1でも2でも3でもありません。
PRINTL Xは10以上20以下です。
CASE IS <= 30
PRINTL Xは1, 2, 3, 10以上20以下のどれでもありません。
PRINTL Xは30以下です。
CASE 40, 5 * 10 TO 6 * 10, IS >= 10 * 10
PRINTL Xは30以下ではありません。
PRINTL Xは40, 50以上60以下, 100以上のいずれかです。
CASEELSE
PRINTL Xは30以下, 40, 50以上60以下, 100以上のいずれにも該当しません。
ENDSELECT
ISやTOはIS <演算子> <数式>、<数式> TO <数式>の形で使わねばならないことに注意してください。
例えば30 < ISや(10 TO 20) || (30 TO 40)のような書き方はできません。
また、<数式> TO <数式>はあくまでも左辺以上、右辺以下の場合に真となります。
右辺が左辺より小さい場合はそのCASEが実行されることはありません。
1つのCASEに複数の条件式がある場合、短絡評価が起きることに注意してください。
条件は左から順にチェックされ、条件を満たすものが見つかった場合、残りの条件は評価されません。
SELECTCASEの引数として文字列式を使用することもできます。
SELECTCASEに文字列を指定した場合はCASEの条件式も文字列式である必要があります。
ヒント
命令のみ対応しています。