コンテンツにスキップ

SELECTCASE

関数名 引数 戻り値
SELECTCASE any なし
CASE any なし
CASEELSE なし なし
ENDSELECT なし なし

API

SELECTCASE anyValue
CASE anyValue(, anyValue...)
CASEELSE
ENDSELECT
分岐構文です。Visual Basicの同名の構文と動作を似せています。
IF構文と似ていますが、SELECTCASEは1つの値を元に複数の行へ分岐する構文です。
SELECTCASEに指定した引数の値によって分岐します。 もっとも単純な使用法は以下のようになります。

SELECTCASE X  
    CASE 1  
        PRINTL Xは1です。  
    CASE 3  
        PRINTL Xは3です。  
    CASEELSE  
        PRINTL Xは1でも3でもありません。  
ENDSELECT  

このスクリプトはXの値によって分岐します。
SELECTCASE文が実行された時、X1であればCASE 1の行に飛び、次のCASEまたはCASEELSEまでの行を実行します。
同様にX3であればCASE 3に飛びます。
Xの値に対応するCASE文がない時、CASEELSE文があればそこに飛びます。なければENDSELECTに飛びます。
Cなどのswitch文と異なり、1つのCASEから次のCASEに流れ落ちることはありません。
また、BREAK文でENDSELECTに飛ぶことはできません。
なお、GOTO等の命令で直接SELECTCASE~CASE~CASEELSE~ENDSELECT内に入った場合、IF~ELSEIF~ELSE~ENDIFと同様に
CASECASEELSEENDSELECTの直前まで通常通り実行したあとに、ENDSELECTの次の行へ飛び処理を続行します。
CASEの条件式には3種類の書式があります。
1つは上記のように値を直接指定する方法、2つ目はIS <演算子> <数式>、3つめは<数式> TO <数式>です。
IS <演算子> <数式>の場合、例えばIS <= 30であればX30以下の場合、CASE以下が実行されます。
<数式> TO <数式>の場合、例えば10 TO 20であればX10以上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  

ISTOIS <演算子> <数式><数式> TO <数式>の形で使わねばならないことに注意してください。
例えば30 < IS(10 TO 20) || (30 TO 40)のような書き方はできません。
また、<数式> TO <数式>はあくまでも左辺以上、右辺以下の場合に真となります。
右辺が左辺より小さい場合はそのCASEが実行されることはありません。

1つのCASEに複数の条件式がある場合、短絡評価が起きることに注意してください。
条件は左から順にチェックされ、条件を満たすものが見つかった場合、残りの条件は評価されません。

SELECTCASEの引数として文字列式を使用することもできます。
SELECTCASEに文字列を指定した場合はCASEの条件式も文字列式である必要があります。

ヒント

命令のみ対応しています。