$SELECT (ObjectScript)
構文
$SELECT(expression:value,...)
$S(expression:value,...)
引数
引数 | 説明 |
---|---|
expression | 関連付けられた value 引数に対する選択テストです。 |
value | 関連付けられた expression が true と評価された場合に返される値です。 |
概要
$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 論理演算子 (') を適用できます。
引数
expression
関連付けられた value 引数に対する選択テストです。InterSystems IRIS の有効な関係式あるいは論理式にできます。true と評価される expression がないときは、システムは <SELECT> エラーを生成します。実行中のルーチンがエラーによって中断されることを防止するために、最後の expression を、常に true に評価される値 1 にできます。
expression が文字列または数値の場合、0 以外の数値はすべて true に評価されます。数値 0 や非数値文字列は false に評価されます。
value
関連付けられた expression が true と評価された場合に返される値です。数値、文字列リテラル、変数名、その他有効な ObjectScript 式を使用できます。value に式を指定すると、関連付けられた expression が true に評価された後にのみ評価されます。value が添え字付きグローバル参照を含む場合は、評価されるときにネイキッド・インジケータを変更します。このため、$SELECT 関数内、あるいは直後にネイキッド・グローバル参照を使用するときは注意してください。ネイキッド・インジケータに関する詳細は、"ネイキッド・グローバル参照" を参照してください。
例
<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
$SELECT と $CASE
$SELECT と $CASE はどちらも、一連の式に対して左から右にマッチング操作を実行して、最初の一致に関連する値を返します。$SELECT は一連のブーリアン式をテストして、最初に true に評価された式に関連する値を返します。$CASE はターゲットの値を一連の式とマッチングして、最初の一致に関連する値を返します。