概要
$SELECT 関数は、最初に true (1) に評価された expression に関連する value を返します。各 $SELECT 引数は、コロンで区切られた組み合わせの式です。左側は、1 (true) または 0 (false) に評価されるブーリアン expression です。右側は、返される value です。value には、任意の式を指定できます。任意の数の expression:value のペアをコンマで区切って指定できます。
以下の例では、最初の 3 つの式の真理値がテストされます。いずれも True に評価されない場合は、最後の式 (常に True に評価されます) がその値を返します。
WRITE $SELECT(x=1:"1st is True",x=2:"2nd is True",x=3:"3rd is True",1:"The Default")
$SELECT は、左から右へ expression を評価します。$SELECT が true の値 (1) の 真偽値式を見つけると、コロンの右側に対応した式を返します。$SELECT は、最左端の true の 真偽値式を見つけると、評価を停止します。引数リストの後のペアを評価することはありません。
$SELECT 関数を入れ子にすることにより、複雑なロジックを構成できます。評価されるすべての真理条件と同じように、入れ子にした $SELECT に NOT 論理演算子 (') を適用できます。
例
<SELECT> エラーの発生を防止するためにも、適切な既定値を持つ最後の式として、常に値 1 を含める必要があります。詳細は、以下の例を参照してください。
Start
READ !,"Which level?: ",a
QUIT:a=""
SET x=$SELECT(a=1:"Level1",a=2:"Level2",a=3:"Level3",1:"Start")
DO @x
Level1()
WRITE !,"This is Level 1"
Level2()
WRITE !,"This is Level 2"
Level3()
WRITE !,"This is Level 3"
ユーザが 1、2、3、または NULL 文字列以外の値を入力すると、制御はルーチンの先頭に渡されます。
$SELECT を使用して、複数の IF 節を置き換えることができます。以下の例は、IF、ELSEIF、そして ELSE 節を使用して、数字が偶数か奇数かの判断をします。
OddEven()
READ !,"Enter an Integer: ",x
QUIT:x=""
WRITE !,"The input value is "
IF 0=$ISVALIDNUM(x) { WRITE "not a number" }
ELSEIF x=0 { WRITE "zero" }
ELSEIF ""=$NUMBER(x,"I") { WRITE "not an integer" }
ELSEIF x#2=1 { WRITE "odd" }
ELSE { WRITE "even" }
DO OddEven
また、以下の例は数字を受け入れ、その数字が偶数か奇数かの判断をします。$SELECT を使用して、前述の例にある IF コマンドを置き換えます。
OddEven()
READ !,"Enter an Integer: ",x
QUIT:x=""
WRITE !,"The input value is "
WRITE $SELECT(0=$ISVALIDNUM(x):"not a number",x=0:"zero",
""=$NUMBER(x,"I"):"not an integer",x#2=1:"odd",1:"even")
DO OddEven