$CASE (ObjectScript)
構文
$CASE(target,case:value,case2:value2,...,:default)
引数
引数 | 説明 |
---|---|
target | ケースに一致させられる値の式、またはリテラル |
case | target の評価の結果と一致させられる値のリテラル、または式 |
value | 対応する case に完全一致したときに返される値 |
default | オプション — target に一致する case がない場合に返される値 |
概要
$CASE 関数は target と case のリスト (リテラルや式) を比較し、最初に一致する case の値を返します。case:value の組み合わせは無制限に指定できます。case は指定された順番 (左から右へ) に一致させられます。最初に完全一致したときにマッチングは終了します。
一致する case がない場合は、default が返されます。一致する case がなく、default が指定されていない場合は、InterSystems IRIS は <ILLEGAL VALUE> エラーを発行します。
InterSystems IRIS では、case:value ペアなしの $CASE を指定できます。これは、target 値に関係なく、常に default 値を返します。
引数
target
$CASE は expression を 1 度評価し、その結果を左から右の順に各 case に一致させます。
case
case はリテラルや式ですが、リテラルはコンパイル時に評価できるので、式よりも、リテラルを照合した方がはるかに効率的です。各 case は value と組み合わせる必要があります。case と value の組み合わせは無制限に指定できます。
value
value はリテラル、または式です。$CASE を GOTO コマンドや DO コマンドの引数として使用する場合は、value は以下のとおり制限されます。
default
default は、case:value の組み合わせのように指定します。ただし、コンマ区切り文字 (項目の分割に使用) とコロン (項目の組み合わせに使用) の間では case は指定されません。default はオプションです。これが指定されている場合は、常に $CASE 関数の最終引数になります。default 値は、value 引数と同じ GOTO と DO の制限に従います。
一致する case がなく、default が指定されていない場合は、InterSystems IRIS は <ILLEGAL VALUE> エラーを発行します。
例
以下の例では、曜日番号を指定し、対応する曜日名を返します。既定値 “entry error” は提供されません。
SET daynum=$ZDATE($HOROLOG,10)
WRITE $CASE(daynum,
1:"Monday",2:"Tuesday",3:"Wednesday",
4:"Thursday",5:"Friday",
6:"Saturday",0:"Sunday",:"entry error")
以下の例では、野球のバッターの出塁記録を入力として指定し、適切な野球用語を書き出します。
SET hit=$RANDOM(5)
SET atbat=$CASE(hit,1:"single",2:"double",3:"triple",4:"home run",:"strike out")
WRITE hit," = ",atbat
以下の例では、$CASE を DO コマンド引数として使用します。これは exp 指数値に適したルーチンを呼び出します。
Start ; Raise an integer to a randomly-selected power.
SET exp=$RANDOM(6)
SET num=4
DO $CASE(exp,0:NoMul(),2:Square(num),3:Cube(num),:Exponent(num,exp))
WRITE !,num," ",result,!
RETURN
Square(n)
SET result=n*n
SET result="Squared = "_result
RETURN
Cube(n)
SET result=n*n*n
SET result="Cubed = "_result
RETURN
Exponent(n,x)
SET result=n
FOR i=1:1:x-1 { SET result=result*n }
SET result="exponent "_x_" = "_result
RETURN
NoMul()
SET result="multiply by zero"
RETURN
以下は、入力された文字が英字かそれ以外の文字であるかをテストする例です。
READ "Input a letter: ",x
SET chartype=$CASE(x?1A,1:"letter",:"other")
WRITE chartype
以下の例では、$CASE を使用して、どの添え字付き変数を返すかを判断しています。
SET dabbrv="W"
SET wday(1)="Sunday",wday(2)="Monday",wday(3)="Tuesday",
wday(4)="Wednesday",wday(5)="Thursday",wday(6)="Friday",wday(7)="Saturday"
WRITE wday($CASE(dabbrv,"Su":1,"M":2,"Tu":3,"W":4,"Th":5,"F":6,"Sa":7))
次の例は、case:value ペアを指定しません。これは、定義されていない default 文字列を返します。
SET dummy=3
WRITE $CASE(dummy,:"not defined")
$CASE と $SELECT
$CASE と $SELECT はどちらも、一連の式に対して左から右にマッチング操作を実行して、最初の一致に関連する値を返します。$CASE はターゲットの値を一連の式とマッチングして、最初の一致に関連する値を返します。$SELECT は一連のブーリアン式をテストして、最初に true に評価された式に関連する値を返します。