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