Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$CASE

expression を比較し、最初に一致した case に関連する値を返します。

Synopsis

$CASE(target,case:value,case:value,...,:default)

パラメータ

target ケースに一致させられる値の式、またはリテラル
case target の評価の結果と一致させられる値のリテラル、または式
value 対応する case に完全一致したときに返される値
default オプションtarget に一致する case がない場合に返される値

概要

$CASE 関数は target と case のリスト (リテラルや式) を比較し、最初に一致する case の値を返します。case:value の組み合わせは無制限に指定できます。case は指定された順番 (左から右へ) に一致させられます。最初に完全一致したときにマッチングは終了します。

一致する case がない場合は、default が返されます。一致する case がなく、default が指定されていない場合は、Caché は <ILLEGAL VALUE> エラーを発行します。

Caché は、case:value ペアなしの $CASE を指定します。これは、target 値に関係なく、常に default 値を返します。

パラメータ

target

$CASE は expression を 1 度評価し、その結果を左から右の順に各 case に一致させます。

case

case はリテラルや式ですが、リテラルはコンパイル時に評価できるので、式よりも、リテラルを照合した方がはるかに効率的です。各 casevalue と組み合わせる必要があります。casevalue の組み合わせは無制限に指定できます。

value

value はリテラル、または式です。$CASEGOTO コマンドや DO コマンドの引数として使用する場合は、value は以下のとおり制限されます。

  • $CASE 文を GOTO コマンドと共に使用する場合、各 value は有効な行ラベルでなければなりません。式は使用できません。

  • $CASE 文を DO コマンドと共に使用する場合、各 value は有効な DO の引数でなければなりません。これら DO 引数はパラメータを含むことができます。

default

default は、case:value の組み合わせのように指定します。ただし、コンマ区切り文字 (項目の分割に使用) とコロン (項目の組み合わせに使用) の間では case は指定されません。default はオプションです。これが指定されている場合は、常に $CASE 関数の最終パラメータになります。default 値は、value パラメータと同じ GOTODO 制限に従います。

一致する case がなく、default が指定されていない場合は、Caché は <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

以下の例では、$CASEDO コマンド引数として使用します。これは 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")

関連項目

FeedbackOpens in a new tab