$SELECT
Synopsis
$SELECT(expression:value,...) $S(expression:value,...)
パラメータ
expression | 関連付けられた value パラメータに対する選択テストです。 |
value | 関連付けられた expression が True と評価された場合に返される値です。 |
概要
$SELECT 関数は、True (1) に評価される、最初の expression に関連付けられた値を返します。各 $SELECT 引数は、コロンで区切られた組み合わせの式です。左側は 真偽値式です。右側は、どのような式でもかまいません。
expression:value の組み合わせの指定されたリストは、任意の長さにできます。$SELECT は、左から右へパラメータを評価します。$SELECT が True の値 (1) の 真偽値式を見つけると、コロンの右側に対応した式を返します。$SELECT は、最左端の True の 真偽値式を見つけると、評価を停止します。パラメータ・リストの後の対を評価することはありません。
パラメータ
expression
関連付けられた value パラメータに対する選択テストです。有効な Caché の関係式、あるいは論理式です。True と評価される expression がないときは、システムは <SELECT> エラーを生成します。実行中のルーチンがエラーによって中断されることを防止するために、最後の expression を、常に true に評価される値 1 にできます。
expression が文字列または数値の場合、0 以外の数値はすべて true に評価されます。数値 0 や非数値文字列は false に評価されます。
value
関連付けられた expression が True と評価された場合に返される値です。数値、文字列リテラル、変数名、その他有効な ObjectScript 式を使用できます。value に式を指定すると、関連付けられた expression が True に評価された後にのみ評価されます。value が添え字付きグローバル参照を含む場合は、評価されるときにネイキッド・インジケータを変更します。このため、$SELECT 関数内、あるいは直後にネイキッド・グローバル参照を使用するときは注意してください。ネイキッド・インジケータに関する詳細は、"Caché グローバルの使用法" の "ネイキッド・グローバル参照" を参照してください。
例
<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
関連項目
-
$CASE 関数