Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$SELECT (ObjectScript)

最初の true の式に関連した値を返します。

Synopsis

$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 関数を入れ子にすることにより、複雑なロジックを構成できます。評価されるすべての真理条件と同じように、入れ子にした $SELECTNOT 論理演算子 (') を適用できます。

引数

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 節を置き換えることができます。以下の例は、IFELSEIF、そして 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 はターゲットの値を一連の式とマッチングして、最初の一致に関連する値を返します。

関連項目

FeedbackOpens in a new tab