指定した変数のデータ値を返します。
Synopsis
$GET(variable,default)
$G(variable,default)
パラメータ
variable ローカルあるいはグローバルの、添え字付きあるいは添え字なしの変数。この変数は未定義でもかまいません。
default オプション — 変数が未定義の場合に返される値。変数の場合、定義が必要です。
概要
$GET は、指定した変数のデータ値を返します。未定義の変数の処理は、default パラメータを指定しているか否かによって異なります。
パラメータ
variable
データ値が返される変数。添え字付きあるいは添え字なしのローカル変数やグローバル変数のいずれかです。変数は、定義済み変数である必要はありませんが、定義することも、NULL 文字列 ("") に設定することもできます。グローバル変数の場合は、拡張グローバル参照を含めることができます。添え字付きグローバル変数の場合は、ネイキッド・グローバル参照を使用して指定できます。未定義の添え字付きグローバル変数を参照するときでも、variable はネイキッド・インジケータをリセットするので、以下で説明されているように、今後のネイキッド・グローバル参照に影響が及びます。
default
variable が未定義の場合に返されるデータ値。添え字付き、または添え字なしのローカル変数やグローバル変数を含む、任意の式です。変数の場合は、定義済みの変数でなければなりません。default が未定義の変数の場合、variable が定義済みであっても、$GET は <UNDEFINED> エラーを返します。グローバル変数の場合は、拡張グローバル参照を含めることができます。添え字付きグローバル変数の場合は、ネイキッド・グローバル参照を使用して指定できます。存在する場合、default はネイキッド・インジケータをリセットするので、以下で説明されているように、今後のネイキッド・グローバル参照に影響が及びます。
以下の例では、変数 test は定義済みで、変数 xtest は未定義です (ZWRITE コマンドは、明示的に NULL 文字列値を返すので使用されます)。
   KILL xtest
   SET test="banana"
   SET tdef=$GET(test),tundef=$GET(xtest)
   ZWRITE tdef    ; $GET returned value of test
   ZWRITE tundef  ; $GET returned null string for xtest
   WRITE !,$GET(xtest,"none") 
     ; $GET returns default of "none" for undefined variable 
メモ
$DATA と比較した $GET
$GET は、$DATA に未定義の変数 ($DATA = 0) とデータ ($DATA = 10) なしの下位ポインタである配列ノードの代わりを提供しています。variable が未定義であるかデータのないポインタ配列ノードのときは、$GET は未定義のエラーなしで NULL 文字列 ("") を返します。例えば、以下の行を再度コード化します。
   IF $DATA(^client(i))=10 {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
   }
以下のように実行します。
   IF $GET(^client(i))="" {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
   }
$DATA テストは、未定義要素と下位ポインタのみの要素を識別するので、$GET テストと比べてより多くの情報を提供します。以下の行で例を示します。
  IF $DATA(^client(i))=0 { QUIT }
  ELSEIF $DATA(^client(i))=10 {
    WRITE !!,"Name: No Data" 
    GOTO Level1+3 
  }
以下のようには再度コード化されません
   IF $GET(^client(i))="" { QUIT }
   ELSEIF $GET(^client(i))="" {
      WRITE !!,"Name: No Data" 
      GOTO Level1+3
   }
2 行は、配列要素が未定義あるいはデータなしの下位ポインタのどちらであるかによって異なる動作をします。$GET がここで使用されると、最初の動作 (QUIT) のみが実行されます。$DATA を最初のテストで使用し、$GET を 2 番目に使用することができますが、その逆 (最初のテストに $GET、2 番目に $DATA を使用すること) はできません。
$GET と $SELECT の既定
$GET(variable,default) は、指定された変数が未定義のときに既定値を返します。$SELECT 関数を使用することでも、同じ結果を得ることができます。
しかし $SELECT とは異なり、$GET の 2 番目の引数は常に評価されます。
variabledefault が両方とも添え字付きグローバル参照を行ってネイキッド・インジケータを変更する場合、$GET が常にその引数の両方を評価するという事実が重要になります。引数は左から右の順に評価されるので、$GETdefault 値を返すか否かにかかわらず、ネイキッド・インジケータは default グローバル参照に設定されます。グローバル変数とネイキッド・インジケータでの $GET の使用に関する詳細は、"Caché 多次元ストレージの使用法" の "多次元ストレージの使用法 (グローバル)" を参照してください。
未定義の変数の処理
$GET は、指定された 変数が未定義の場合の振る舞いを定義します。指定の変数が未定義の場合、$GET の返す基本的な形式は NULL 文字列 ("") です。
$DATA は、指定された変数が定義済みかどうかテストします。変数が未定義の場合は 0 を返します。
$ZUTIL(18) 関数は、現在のプロセスに対するすべての未定義変数への振る舞いを定義します。$ZUTIL(69,0) 関数は、システム全体のすべての未定義変数への振る舞いを定義します。$ZUTIL(18)$ZUTIL(69,0) を設定しても、指定された変数の $GET$DATA に影響を与えることはありません。
関連項目