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
の条件式も文字列式である必要があります。
ヒント
命令のみ対応しています。