Caché の様々な構文
既存の ObjectScript コードを読むと、あまり知られていない構文形式が使用されていることがあります。このページでは、さまざまなグループの構文形式を示し、それが何であるか、その詳細な情報をどこで入手できるのかについて説明します。
このページでは、演算子であることや関数またはコマンドの引数であることが明らかな単一の文字については説明しません。
"ObjectScript リファレンス" の以下の付録も参照してください。
“単語“ の中の非英数字
このセクションでは、非英数字が中に含まれる単語のような形式のリストを示します。演算子はよく知られているため、それらの多くは明白です。以下はその例です。
x>5
あまり明白ではない形式は、以下のとおりです。
abc^def
def はルーチンであり、abc はそのルーチン内のラベルです。abc^def はサブルーチンです。
abc のバリエーションは、以下のとおりです。
def のバリエーションは、以下のとおりです。
-
%def
-
def.ghi
-
%def.ghi
-
def(xxx)
-
%def(xxx)
-
def.ghi(xxx)
-
%def.ghi(xxx)
xxx は、オプションのコンマ区切りの引数のリストです。
ラベルは、パーセント記号で開始できますが、その後は英数字です。
ルーチン名はパーセント記号で開始でき、1 つ以上のピリオドを含めることができます。キャラットはその名前の一部ではありません。(一般的な使用法では、ルーチンを、その名前の先頭にキャラットが含まれているかのように参照することはよくあります。したがって、^def ルーチンに関するコメントが記述されていることがあります。通常、グローバルを参照しているのか、ルーチンを参照しているのかはコンテキストから判断できます。)
i%abcdef
これは、インスタンス変数であり、これを使用してオブジェクトの abcdef プロパティの値を取得または設定できます。"クラスの定義と使用" の "オブジェクト特有の ObjectScript の機能" を参照してください。
この構文は、インスタンス・メソッド内でのみ使用できます。abcdef は、同じクラスまたはスーパークラスのプロパティです。
abc->def
バリエーション :
この構文は、InterSystems SQL 文内でのみ使用できます。これは、InterSystems IRIS 矢印構文の例であり、暗黙的な左外部結合を指定します。abc は、クエリ対象のクラスのオブジェクト値フィールドであり、def は、その子クラスのフィールドです。
abc->def は、InterSystems SQL では使用できない InterSystems IRIS ドット構文 (abc.def) に類似したものです。
InterSystems IRIS 矢印構文の詳細は、"InterSystems SQL の使用法" の "暗黙結合 (矢印構文)" を参照してください。
abc?def
バリエーション :
疑問符は、パターン・マッチ演算子です。最初の形式では、この式は、変数 abc の値が def に指定されたパターンに一致しているかどうかをテストします。2 番目の形式では、"abc" はテスト対象の文字列リテラルです。
文字列リテラル "abc" と引数 def のどちらにも英字以外の文字を含めることができます。
"abc"["def"
バリエーション :
-
abc[def
-
abc["def"
-
"abc"[def
左側の括弧 ([) は、二項包含関係演算子です。最初の形式では、この式は、文字列リテラル "abc" に文字列リテラル "def" が含まれるかどうかをテストします。後の形式では、abc と def が、テスト対象の変数です。
文字列リテラル "abc" と "def" のどちらにも英字以外の文字を含めることができます。
"abc"]"def"
バリエーション :
-
abc]def
-
abc]"def"
-
"abc"]def
右側の括弧 (]) は、二項後続関係演算子です。最初の形式では、この式は、ASCII 文字順で文字列リテラル "abc" が文字列リテラル "def" の後に来るかどうかをテストします。後の形式では、abc と def が、テスト対象の変数です。
文字列リテラル "abc" と "def" のどちらにも英字以外の文字を含めることができます。
"abc"]]"def"
バリエーション :
-
abc]]def
-
abc]]"def"
-
"abc"]]def
2 つの連続した右側の括弧 (]]) は、二項前後関係演算子です。最初の形式では、この式は、数値添え字の照合順序で文字列リテラル "abc" が文字列リテラル "abc" の後に順番に並んでいるかどうかをテストします。後の形式では、abc と def が、テスト対象の変数です。
文字列リテラル "abc" と "def" のどちらにも英字以外の文字を含めることができます。
.(ピリオド 1 つ)
引数リスト内のピリオド
バリエーション :
メソッドまたはルーチンを呼び出すと、引数を参照で渡すか、出力として渡すことができます。このためには、引数の前にピリオドを置きます。
行の先頭のピリオド
Do コマンドの命令形式では、数行のコードのグループを 1 つのコード・ブロックにまとめるために、ピリオドの接頭辞を使用します。この従来の Do コマンドは、InterSystems IRIS では使用できません。
..(2 つのピリオド)
どの場合も、2 つの連続したピリオドは、クラス・メンバ内から別のクラス・メンバへの参照の始まりです。
..abcdef
この構文は、インスタンス・メソッド内でのみ使用できます (ルーチンまたはクラス・メソッド内では使用できません)。abcdef は、同じクラスのプロパティです。
..abcdef(xxx)
この構文は、メソッド内でのみ使用できます (ルーチン内では使用できません)。abcdef() は、同じクラスの別のメソッドであり、xxx はオプションの引数のコンマ区切りリストです。
..#abcdef
この構文は、メソッド内でのみ使用できます (ルーチン内では使用できません)。abcdef は、このクラスのパラメータです。
インターシステムズが提供するクラスでは、慣例ですべてのパラメータがすべて大文字で定義されていますが、作成するコードでは大文字にしなくてもかまいません。
シャープ記号は、パラメータ名の一部ではありません。
# (シャープ記号)
このセクションでは、シャープ記号で始まる形式のリストを示します。
#abcdef
多くの場合、#abcdef はプリプロセッサ指示文です。InterSystems IRIS には、一連のプリプロセッサ指示文が用意されています。これらの名前は、1 つまたは 2 つのシャープ記号で始まります。以下は、いくつかの一般的な例です。
-
#define は、マクロを定義します (引数を伴うこともあります)。
-
#def1arg は、コンマを含む 1 つの引数を持つマクロを定義します。
-
#sqlcompile mode は、後続の埋め込み SQL 文のコンパイル・モードを指定します。
リファレンス情報およびその他の指示文の詳細は、"ObjectScript の使用法" の "ObjectScript マクロとマクロ・プリプロセッサ" を参照してください。
あまり一般的ではありませんが、形式 #abcdef は引数です。この引数は、特定のコマンド (READ や WRITEなど)、特殊な変数、またはルーチンに使用します。詳細は、この引数を使用するコマンド、変数、またはルーチンのリファレンスの情報を参照してください。
##abcdef
##abcdef はプリプロセッサ指示文です。#abcdef の説明を参照してください。
##class(abc.def).ghi(xxx)
バリエーション :
abc.def はパッケージおよびクラス名であり、ghi はそのクラスのクラス・メソッドであり、xxx はオプションの引数のコンマ区切りリストです。
パッケージが省略されている場合、クラス def はこの参照を含むクラスと同じパッケージ内にあります。
##super()
バリエーション :
この構文は、メソッド内でのみ使用できます。これは、スーパークラスのオーバーライドされたメソッドを、現在のクラス内の同じ名前の現在のメソッド内から呼び出します。abcdef はそのメソッドの引数のコンマ区切りリストです。"クラスの定義と使用" の "オブジェクト特有の ObjectScript の機能" を参照してください。
ドル記号 ($)
このセクションでは、ドル記号で始まる形式のリストを示します。
$abc.def.ghi(xxx)
この形式では、$abc は $SYSTEM (大文字小文字を問わない)、def は %SYSTEM パッケージのクラスの名前、ghi はそのクラスのメソッドの名前、および xxx はそのメソッドのオプションの引数のコンマ区切りリストです。
$SYSTEM 特殊変数は、%SYSTEM パッケージのエイリアスであり、そのパッケージのクラスのメソッドに対して言語に依存しないアクセスを提供します。例えば、$SYSTEM.SQL.DATEDIFF のようになります。
このクラスのメソッドの詳細は、インターシステムズ・クラス・リファレンスを参照してください。
$$abc
バリエーション :
abc は、この参照を含むルーチンまたはメソッド内で定義されたサブルーチンです。この構文は、サブルーチン abc を呼び出し、その返り値を取得します。"ObjectScript の使用法" の "ユーザ定義コード" を参照してください。
$$abc^def
バリエーション :
-
$$abc^def(xxx)
-
$$abc^def.ghi
-
$$abc^def.ghi(xxx)
この構文は、サブルーチン abc を呼び出し、その返り値を取得します。キャラットの後の部分は、このサブルーチンを含むルーチンの名前です。"ObjectScript の使用法" の "ユーザ定義コード" を参照してください。
$$$abcdef
abcdef はマクロです。ドル記号はその名前の一部ではありません (したがって、マクロ定義には表示されません)。
InterSystems IRIS に用意されているマクロのいくつかは、"ObjectScript の使用法" の "システムにより提供されるマクロのリファレンス" に記載されています。
一般的な使用法では、マクロを、その名前にドル記号が含まれているかのように参照することはよくあります。したがって、$$$abcdef マクロに関するコメントが記述されていることがあります。
パーセント記号 (%)
規約では、InterSystems IRIS システム・クラスの大部分のパッケージ、クラス、およびメソッドは、パーセント文字で始まります。調べている要素がこれらの 1 つであるかどうかはコンテキストから明確になります。それ以外の場合は、以下の可能性があります。
%abcdef
%abcdef は、以下のいずれかです。
-
ローカル変数。InterSystems IRIS によって設定されるローカル変数も含みます。
-
ルーチン。
バリエーション :
-
埋め込み SQL 変数 (それらは %msg、%ok、%ROWCOUNT、および %ROWID です)。
詳細は、"InterSystems SQL の使用法" の "埋め込み SQL のホスト変数" を参照してください。
-
InterSystems SQL コマンド、関数、または述語条件 (例えば、%STARTSWITH および %SQLUPPER)。
バリエーション :
詳細は、"InterSystems SQL リファレンス" を参照してください。
%%abcdef
%abcdef は %%CLASSNAME、%%CLASSNAMEQ、%%ID、または %%TABLENAME です。これらは、擬似フィールド・キーワードです。詳細は、"InterSystems SQL リファレンス" を参照してください。
キャレット (^)
このセクションでは、キャレットで始まる形式を、よく使われるものから順に示します。
^abcdef
バリエーション :
これには以下の 3 つの可能性があります。
-
^abcdef または ^%abcdef はグローバルです。
-
^abcdef または ^%abcdef は、LOCK コマンドの引数です。この場合、^abcdef または ^%abcdef は、ロック名になり、ロック・テーブル (メモリ内) に保持されます。
-
abcdef または %abcdef はルーチンです。キャラットは名前の一部ではなく、ルーチンを呼び出す構文の一部です。
一般的な使用法では、ルーチンの名前の先頭にキャレットが含まれているものとしてルーチンを参照することはよくあります。したがって、^abcdef ルーチンに関するコメントが記述されていることがあります。通常、グローバルを参照しているのか、ルーチンを参照しているのかはコンテキストから判断できます。ロック名は、LOCK コマンドの後にのみ指定されます。その他のコンテキストで、ロック名を使用することはできません。
^$abcdef
バリエーション :
これらはそれぞれ、構造化システム変数であり、グローバル、ジョブ、ロック、またはルーチンに関する情報を提供します。
$abcdef は $GLOBAL、$JOB、$LOCK、または $ROUTINE です。
ghijkl はネームスペース名です。
InterSystems IRIS では、以下のシステム変数に情報を格納します。
"ObjectScript リファレンス" を参照してください。
^||abcdef
バリエーション :
-
^|"^"|abcdef
-
^["^"]abcdef
-
^["^",""]abcdef
これらはそれぞれ、サイズの大きいデータ値を一時的に格納するためのメカニズムであるプロセス・プライベート・グローバルです。InterSystems IRIS では、いくつかが内部で使用されていますが、パブリックに使用するために提供されていません。ユーザ独自のプロセス・プライベート・グローバルを定義し、使用できます。"ObjectScript の使用法" の "変数" を参照してください。
^|XXX|abcdef
いくつかのバリエーション :
-
^|XXX|%abcdef
-
^[XXX]abcdef
-
^[XXX]%abcdef
これらはそれぞれ、拡張参照 (別のネームスペース内のグローバルまたはルーチンの参照) です。以下の可能性があります。
XXX コンポーネントはネームスペースを示します。これは、引用符で囲んだ文字列または引用符で囲まれていない文字列です。"ObjectScript の使用法" の "構文規則" の “拡張参照” を参照してください。
^abc^def
これは暗黙のネームスペースです。"ObjectScript リファレンス" の "ZNSPACE" を参照してください。
^^abcdef
これは暗黙のネームスペースです。"ObjectScript リファレンス" の ZNSPACE のエントリを参照してください。
その他の形式
+abcdef
いくつかのバリエーション :
これらの式はそれぞれ、数値を返します。最初のバーションでは、abcdef はローカル変数の名前です。この変数の内容が数値文字で始まらない場合、この式は 0 を返します。内容が数値文字で始まる場合、この式はその数値文字と、それ以降のすべての数値文字を (数値以外の文字が初めて出現するまで) 返します。ここでは、以下の例を実行します。
write +"123abc456"
"ObjectScript の使用法" の "文字列関係演算子" を参照してください。
{"abc":(def),"abc":(def),"abc":(def)}
{abcdef}
この構文は、InterSystems SQL で ObjectScript が使用されている場合に使用されることがあります。abcdef はフィールドの名前です。"クラスの定義と使用" の "ObjectScript からのフィールドの参照" を参照してください。
{%%CLASSNAME}
この構文は、トリガ・コード内で使用でき、クラスのコンパイル時に置換されます。
その他 :
-
{%%CLASSNAMEQ}
-
{%%ID}
-
{%%TABLENAME}
これらの項目では、大文字と小文字は区別されません。"InterSystems SQL リファレンス" の "CREATE TRIGGER" を参照してください。
&sql(xxx)
これは埋め込み SQL であり、ObjectScript が使用されている場所であればどこでも使用できます。xxx は 1 つの SQL 文です。"InterSystems SQL の使用法" の “埋め込み SQL の使用法” を参照してください。
*abcdef
以下の関数およびコマンドによって使用される特別な構文です。
"ObjectScript リファレンス" を参照してください。
?abcdef
疑問符は、パターン・マッチ演算子であり、abcdef は比較パターンです。