ObjectScript 構文の基本
ここでは、ObjectScript 構文の基本的な規則について説明します。詳細な構文ルールについては、他のページで説明します。
左から右の評価順序
ObjectScript で演算子の評価順序は、必ず左から右です。したがって、式の演算は表示された順番で実行されます。これは、特定の演算子の優先順位が他の演算子よりも高くなることがある他の言語と異なります。詳細は、"演算子の優先順位" を参照してください。
大文字と小文字の区別
ObjectScript には、大文字と小文字を区別する場合とそうでない場合があります。以下の概要で、すべてではありませんが、さまざまなケースについて説明します。
-
大文字と小文字を区別しない:ObjectScript のコマンド、関数、システム変数では、大文字と小文字が区別されない。
-
通常は大文字と小文字を区別しない:デバイス名、ファイル名、ディレクトリ名、ディスク・ドライブ名で、大文字と小文字を区別するかどうかはプラットフォームによる。指数記号は、通常大文字と小文字が区別されませんが、これはシステム構成によって異なります。
-
大文字と小文字を区別する:変数名 (ObjectScript システム変数以外) は大文字と小文字が区別される。ルーチンとそのエントリ・ポイントの名前、インクルード・ファイルとマクロの名前もすべて大文字と小文字が区別されます。
また、ObjectScript 構文を使用してパッケージ、クラス、またはクラス・メンバを参照する場合は、大文字と小文字を正確に一致させる必要があります。ただし、大文字と小文字のみが異なるパッケージまたはクラスを作成することはできません。例えば、クラス A.B を作成した場合、このクラスを参照する際はこのとおり大文字を使用する必要があります (例 : ##class(A.B).MyMethod())。ただし、a.b、A.b、または a.B という名前のクラスを作成することはできません。また、a.b、A.b、または a.B という名前のパッケージに新しいクラスを作成することもできません。
識別子
識別子とは、変数、パッケージ、クラス、クラス・メンバ、ルーチン、またはラベルの名前です。一般に、正当な識別子は文字や数字で構成されています。まれな例外を除き、句読点文字は識別子に使用できません。識別子は大文字と小文字を区別します。
変数の場合は、変数名によって変数の種類が決まり、変数の種類によって変数の範囲や特殊な特性が決まります。"ObjectScript の変数と範囲" を参照してください。
回避する必要がある変数名など、識別子のリファレンス情報は、"識別子のルールとガイドライン" を参照してください。
予約語
ObjectScript に予約語はありません。したがって、あらゆる有効な識別子を、変数名、関数名、ラベルとして使用できます。同時に、コマンド名、関数名、他の文字列である識別子の使用を避けるのが適切です。また、ObjectScript コードは埋め込み SQL をサポートするため、関数、オブジェクト、変数、SQL 予約語である他のエンティティの名前を避けることが賢明です。そうしなければ、障害が発生する原因となります。
式
ObjectScript 式は、値を算出するために評価される 1 つ以上のトークンです。最も単純な式は、リテラルあるいは変数です。
SET expr = 22
SET expr = "hello"
SET expr = x
演算子と関数を使用して、より複雑な式を作成できます。
SET expr = +x
SET expr = x + 22
SET expr = array(1)
SET expr = ^data("x",1)
SET expr = $Length(x)
式は、オブジェクト・プロパティ、インスタンス・メソッド呼び出し、クラス・メソッド呼び出しから構成されます。
SET expr = person.Name
SET expr = obj.Add(1,2)
SET expr = ##class(MyApp.MyClass).Method()
ルーチン呼び出しの前に $$ を置き、ObjectScript ルーチン呼び出しを式で直接実行できます。
SET expr = $$MyFunc^MyRoutine(1)
コマンド
ObjectScript の実行タスクは、すべてコマンドで実行されます。すべてのコマンドは、コマンド・キーワードと (ほとんどの場合) これに続く 1 つまたは複数のコマンド引数から構成されます。以下の構文ルールに留意してください。
-
コマンド名では、大文字と小文字は区別されません。ほとんどのコマンド名は省略形で表現できます。したがって、WRITE、Write、write、W、および w はいずれも、WRITE コマンドの有効な形式です。コマンドの省略形のリストは、"省略形テーブル" を参照してください。
-
コマンド・キーワードは予約語ではありません。したがって、コマンド・キーワードを変数のユーザ割り当て名、ラベル、またはその他の識別子として使用できます。
-
コード内の列 1 には、ObjectScript コマンドを記述することはできません。後述の空白に関する説明を参照してください。
ObjectScript シェルまたは XECUTE コマンドからコマンドを発行する際には、この制約は適用されません。
-
コマンドが引数を受け入れる場合、コマンドと最初の引数の間にスペースを 1 つだけ置く必要があります。
-
同じ行に、複数のコマンド (とその引数) を含めることができます。
コマンドは厳密に左から右の順序で実行され、別々の行で記述したコマンドと機能的に同一となります。引数付きのコマンドは、単一の空白文字によって後続コマンドと区切る必要があります。引数なしのコマンドは、2 つの空白文字によって後続コマンドと区切る必要があります。ラベルには、同一行にて 1 つ以上のコマンドを後続させることができます。コメントは、同一行にて 1 つ以上のコマンドの後に続けることができます。
ソース・コードの行の最大長に関する詳細は、"一般的なシステム制限" を参照してください。
1 つ以上のコマンドは同一行のラベルの後に続きます。ラベルとコマンドは 1 つ以上のスペースで区切ります。
-
コマンド末端や行末の区切り文字が必要なく、または不許可となります。コマンドの後には、行内コメントを指定して、コマンド行の残りの部分がコメントであることを示すことができます。コマンドの末端とコメント構文の間には空白スペースが必要になりますが、##; および /* comment */ の構文については例外となります。/* comment */ の複数行コメントは、1 つのコマンド内かつコマンド末端にて指定可能です。
-
多くのコマンドが、後置条件式を使用できます。後置条件式は、コマンドを実行するかどうかを決定する論理式を指します。式が true に評価される場合、コマンドは実行され、それ以外の場合は実行されません。
コマンド後置条件式
ほとんどの場合、ObjectScript のコマンドを指定する際、後置条件を追加することができます。
後置条件とは、コマンドや (時には) コマンド引数に追加されるオプションの式で、InterSystems IRIS がそのコマンドやコマンド引数を実行するかどうかを制御します。後置条件式の評価が True (ゼロ以外の値) の場合、InterSystems IRIS はそのコマンドあるいはコマンド引数を実行します。また、後置条件式の評価が False (ゼロ) の場合、InterSystems IRIS はそのコマンドあるいはコマンド引数を実行せず、次のコマンドあるいはコマンド引数に実行を移します。
すべての ObjectScript コマンドでは、フロー制御コマンド (IF、ELSEIF、ELSE、FOR、WHILE、および DO WHILE) 以外、およびブロック構造エラー処理コマンド (TRY、CATCH) 以外で、後置条件式を使用できます。
ObjectScript コマンド DO と XECUTE は、コマンド・キーワードとコマンド引数の両方に後置条件式を追加できます。後置条件式は常にオプションです。例えば、コマンドの引数の中でも、後置条件式が追加されている引数と追加されていない引数があります。
コマンド・キーワードとコマンドの引数の両方が後置条件を持つ場合、キーワード後置条件が最初に評価されます。このキーワード後置条件が True に評価された場合にのみ、コマンド引数の後置条件が評価されます。コマンド・キーワードの後置条件が False の場合、コマンドは実行されず、プログラムは次のコマンドに移って実行を続けます。コマンド引数の後置条件が False の場合、引数は実行されず、コマンドは次の引数を左から右の順で実行を続けます。
後置条件構文
コマンドに後置条件を追加するには、コマンド・キーワードの直後にコロン (:) と式を置きます。後置条件式を持つコマンドの構文は以下のようになります。
Command:pc
Command はコマンド・キーワード、コロンは必須のリテラル文字で、pc は任意の有効な式にできます。
コマンド後置条件には、以下の構文規則があります。
-
スペース、タブ、改行、コメントは、コマンド・キーワードと後置条件式の間、あるいはコマンド引数と後置条件式の間には使用できません。コロン文字の前後にスペースを使用することはできません。
-
スペース、タブ、改行、コメントは、後置条件式内では使用できません。ただし、後置条件式全体が括弧で囲まれている場合や、括弧で囲まれた引数リストが後置条件式にある場合は使用できます。スペース、タブ、改行、コメントは括弧内で使用できます。
-
後置条件式の後に置く必要があるスペースは、コマンド・キーワードの場合と同様です。キーワード後置条件式の最後の文字と 1 番目の引数の最初の文字の間には、スペースを正確に 1 つ置きます。引数なしコマンドでは、後置条件の直後に右中括弧が続かない限り、後置条件式の最後の文字と同じ行にある次のコマンドの間に、2 つ以上のスペースを置く必要があります。(括弧を使用する場合、閉じ括弧は後置条件式の最後の文字として処理されます。)
後置条件式は、厳密に言えばコマンド引数ではありません (しかし、ObjectScript リファレンス・ページで、後置条件式は、引数セクションの一部として示されています)。後置条件は常にオプションです。
後置条件の評価
InterSystems IRIS は、後置条件式を True あるいは False として評価します。通常、これらは 1 あるいは 0 の値で評価することをお勧めします。しかし、InterSystems IRIS はあらゆる値の後置条件式を実行し、式の値が 0 の場合は False、ゼロ以外の場合は True として評価します。
-
InterSystems IRIS は、有効なゼロ以外の数値を True として評価します。算術演算のように、有効な数値に対し同じ評価基準を使用します。したがって、1、“1”、007、3.5、-.007、7.0、3 little pigs、$CHAR(49)、0_"1" はすべて、True と評価されます。
-
InterSystems IRIS は、ゼロ (0) 値およびすべての非数値 (空白文字 (" ") が含まれる文字列や NULL 文字列 ("") など) を False として評価します。したがって、0、-0.0、A、-、$、The 3 little pigs、$CHAR(0)、$CHAR(48)、"0_1" はすべて、False と評価されます。
-
一般的な等式の規則が適用されます。したがって、0=0、0="0"、"a"=$CHAR(97)、0=$CHAR(48)、(""=$CHAR(32)) は、True と評価されます。一方、0=、0=$CHAR(0)、(=$CHAR(32)) は False と評価されます。
次の例では、どの WRITE コマンドが実行されるかは、変数 count の値によって異なります。
FOR count=1:1:10 {
WRITE:count<5 count," is less than 5",!
WRITE:count=5 count," is 5",!
WRITE:count>5 count," is greater than 5",!
}
コマンド引数
コマンド・キーワードの後ろには、オブジェクト (複数も可) またはコマンドの範囲を指定する 1 つ以上の引数を置くことができます。また、引数を置かない場合もあります。コマンドが 1 つ以上の引数を取得する場合、コマンド・キーワードと最初の引数の間にスペースを 1 つだけ置く必要があります。以下に例を示します。
SET x = 2
最初の引数の最初の文字が (上記のように) 正確に 1 つのスペースでコマンド自体から区切られている限り、引数内または引数間でスペースを使用できます。したがって、以下はすべて有効です。
SET a = 1
SET b=2
SET c=3,d=4
SET e= 5 , f =6
SET g
= 7
WRITE a,b,c,d,e,f,g
コマンドが後置条件を取る場合、コマンド・キーワードと後置条件間にスペースを置くことはできません。また、後置条件と 1 番目の引数の最初に必ず 1 つのスペースを置きます。以下の形式の QUIT コマンドはすべて有効です。
QUIT x+y
QUIT x + y
QUIT:x<0
QUIT:x<0 x+y
QUIT:x<0 x + y
引数間にスペースは必要ありませんが、複数の空白スペースを引数間で使用する場合もあります。これらの空白スペースは、コマンドの実行に影響を与えません。また、改行、タブ、コメントもコマンド引数内や引数間に含まれますが、コマンドの実行に影響はありません。詳細は、"空白" を参照してください。
複数の引数
多くのコマンドでは、複数の独立引数を指定することができます。コマンド引数の区切り記号はコンマ (,) です。つまり、1 つのコマンドの後ろに、コンマで区切られたリストとして複数の引数を指定します。以下に例を示します。
SET x=2,y=4,z=6
Set コマンドは、3 つの引数を使用して、指定した 3 つの変数に値を割り当てます。ここでは、複数の引数が繰り返されます。つまり、コマンドは、指定された順番で各引数に個別に割り当てられます。内部的には、InterSystems IRIS データ・プラットフォームがこれを 3 つの別個の SET コマンドとして解析します。デバッグ時においては、これらの複数の引数それぞれが別個の手順となります。
コマンド・リファレンス・ページで紹介しているコマンド構文では、繰り返して記述できる引数の後にコンマと省略記号 ,... が続きます。このコンマは引数に必要な区切り文字です。また、省略記号 (...) は、不特定の数の繰り返し引数を指定できることを示しています。
繰り返し引数は、厳密に左から右の順で実行されます。したがって、以下のコマンドが有効となります。
SET x=2,y=x+1,z=y+x
ただし、以下のコマンドは無効です。
SET y=x+1,x=2,z=y+x
各繰り返し引数は、指定した順序で独立して実行されるため、無効な引数が検出されるまで有効な引数が実行されます。以下の例では、SET x では値が x に代入され、SET y では <UNDEFINED> エラーが発生し、SET z が評価されていないため、<DIVIDE> (0 による除算) エラーは検出されません。
KILL x,y,z
SET x=2,y=z,z=5/0
WRITE "x is:",x
独自の引数と後置条件を持つ引数
一部のコマンド引数は、独自の引数および独自の後置条件を受け入れます。
次のコマンド例では、2 つの引数の間にコンマが表示されています。各引数の後には、独自の引数のコロン区切りリストが続いています。
VIEW X:y:z:a,B:a:y:z
少数のコマンド (DO、XECUTE、および GOTO) では、引数に続くコロンは、その引数を実行するかどうかを決める後置条件式を指定します。
引数なしコマンド
引数を持たないコマンドは、引数なしコマンドといいます。キーワードに追加された後置条件式は引数とは見なされません。
常に引数を持たないコマンドが少数あります。例えば、HALT、CONTINUE、TRY、TSTART および TCOMMIT は、引数なしコマンドです
いくつかのコマンドは必要に応じて引数なしになります。例えば、BREAK、CATCH、FOR、GOTO、KILL、LOCK、NEW、QUIT、RETURN、TROLLBACK、WRITE、および ZWRITE には、すべて引数なしの構文形式があります。このような場合、同じコマンドでも引数ありと引数なしでは、意味が多少異なる場合があります。
引数なしコマンドを行の最後で使用する場合、末尾のスペースは必要ありません。引数なしコマンドを他のコマンドと同一のコード行で使用する場合、引数なしコマンドと後続のコマンドの間には 2 つ (あるいはそれ以上) のスペースを置く必要があります。以下に例を示します。
QUIT:x=10 WRITE "not 10 yet"
この場合、QUIT は後置条件式を持つ引数なしのコマンドです。このコマンドと次のコマンドの間に、少なくとも 2 つのスペースが必要です。
引数なしコマンドと中括弧
中括弧で区切られたコマンド・ブロック内で引数なしコマンドを使用する場合、空白の制限はありません。
-
引数なしコマンドの直後に左中括弧が続く場合、コマンド名と中括弧の間に空白は必要ありません。何も指定しないか、1 つあるいは複数のスペース、タブ、または改行を指定します。これは、FOR などのように引数を使用できる引数なしコマンド、および ELSE などのように引数を使用できない引数なしコマンドのどちらにも当てはまります。
FOR { WRITE !,"Quit out of 1st endless loop" QUIT } FOR{ WRITE !,"Quit out of 2nd endless loop" QUIT } FOR { WRITE !,"Quit out of 3rd endless loop" QUIT }
-
右中括弧は区切り文字として機能するため、引数なしコマンドの直後に右中括弧が続く場合、後続のスペースは必要ありません。例えば、以下の方法で、引数なしの QUIT を使用します。
IF 1=2 { WRITE "Math error"} ELSE { WRITE "Arthmetic OK" QUIT} WRITE !,"Done"
ルーチンの構文
ルーチンは、ObjectScript プログラムの構成要素です。クラス定義 (正式には ObjectScript 言語の一部ではありません) は、ルーチンにコンパイルされます。ニーズに合わせて、ルーチンとクラス定義の任意の組み合わせを記述できます。このコードはすべて、最終的に実行時コードにコンパイルされます。
ルーチンは、ObjectScript コードの行、コメント、および空白行で構成されるコード・ユニット (通常は、IDE またはソース・コントロール・システム内の単一のユニット) です。一般に、次のように編成されています。
-
冒頭の 1 つ以上のコメント行。オプションでルーチンの名前を示し、使用上の注意や更新履歴を含めることができます。
-
次の構文を持つ、任意の数のプロシージャ
ProcedureName(Arguments) scopekeyword { //procedure implementation }
以下はその説明です。
-
ProcedureName はプロシージャの名前です。これは ObjectScript ラベルで、行の列 1 から始める必要があります。
-
Arguments は、オプションの引数のコンマ区切りリストです。引数がない場合でも、括弧は含める必要があります。
-
オプションの scopekeyword は、以下のいずれか (大文字と小文字を区別しない) です。
-
Public。Public を指定すると、そのプロシージャはパブリックとなり、そのルーチン自体の外で呼び出すことができます。
-
Private (プロシージャに対する既定値)。Private を指定すると、そのプロシージャはプライベートとなり、それと同じルーチン内の他のコードのみで呼び出すことができます。
-
-
実装は、ゼロ行以上の ObjectScript で構成されます。このコードは、RETURN または QUIT を介して値を返すことができます。
詳細は、"プロシージャの構文" を参照してください。
-
ルーチンには、以下を含めることもできます。
-
コメントと空白 (プロシージャ内とプロシージャ間の両方)
メソッドの構文
完全性を確保するために、クラス内で定義されるメソッドを検討することも有用です。クラス定義は ObjectScript の一部ではありませんが、ObjectScript を複数の場所に含めることができます。また、クラスはルーチンにコンパイルされ、最終的には同じ実行時コードにコンパイルされます。クラスで ObjectScript が最もよく使用されるのはメソッド内です。クラス・メソッド (一部の言語では静的メソッドと呼ばれます) の構文は次のとおりです。
ClassMethod MethodName(Arguments) as Classname [ Keywords]
{
//method implementation
}
インスタンス・メソッド (オブジェクト・クラスにのみ関係します) の構文も同様です。
Method MethodName(Arguments) as Classname [ Keywords]
{
//method implementation
}
以下はその説明です。
-
MethodName は、メソッドの名前です。
-
Arguments は、引数のコンマ区切りリストです。
-
Classname は、このメソッドで返される値 (ある場合) のタイプを表す、オプションのクラス名です。メソッドが値を返さない場合は、As Classname 部分を省略します。
-
Keywords は任意のメソッド・キーワードを表し、このメソッドが SQL にどのように投影されるか、このメソッドが所属するクラス外で使用できるかどうかなどを制御します。これらはオプションです。"コンパイラ・キーワードの概要" を参照してください。
-
メソッドの実装は、ゼロ行以上の ObjectScript で構成されます。このコードは、RETURN または QUIT を介して値を返すことができます。
空白
特定の環境では、ObjectScript は構文的に意味のあるものとして空白を処理します。指定がない限り、空白はブランク、タブ、改行と同じ意味を示します。以下はその規則の概要です。
-
コードの各行または 1 行コメントの先頭には空白を記述する必要があります。以下の場合には先頭の空白が不要となります。
-
ラベル (タグまたはエントリ・ポイントとも呼ばれる): ラベルは直前の空白文字なしで列 1 にて記述する必要があります。行にラベルがある場合、そのラベルと同一行上の他のコードやコメントの間には空白が必要です。ラベルがパラメータ・リストを有する場合、ラベル名とパラメータ・リストの最初の括弧の間にある空白をなくすこともできます。パラメータ・リスト内のパラメータの前、間、または後には空白を入れることができます。
-
マクロ指示文: #define などのマクロ指示文は直前の空白文字なしで列 1 に記述できます。これは推奨の規約となりますが、マクロ指示文の前の空白は認められています。
-
複数行コメント: 複数行コメントの最初の行の前には 1 つ以上のスペースを配置する必要があります。複数行コメントの 2 行目以降には、先頭に空白を置く必要はありません。
-
空白行: 行に文字がない場合は、スペースを含める必要はありません。空白文字のみで構成される行も認められており、コメントとして扱われます。
-
-
コマンドと最初の引数の間には、必ずスペース文字を 1 つだけ記述する必要があります (タブ文字ではありません)。コマンドで後置条件を使用する場合、コマンドとその後置条件との間にはスペース文字を記述しません。
-
後置条件式にスペースがある場合、式全体を括弧で囲む必要があります。
-
組になったコマンド引数の間には、いくつもの空白を置くことができます。
-
1 行にコードと 1 行のコメントが含まれる場合は、その間に空白を置く必要があります。
-
通常、それぞれのコマンドは独自の行に記述されますが、同じ行に複数のコマンドを入力することができます。この場合、これらのコマンドの間には空白が必要です。引数がないコマンドの後には、空白を 2 つ (スペース文字を 2 つ、タブ文字を 2 つ、またはスペース文字とタブ文字をそれぞれ 1 つずつ) 記述する必要があります。これら必須の空白の後に、さらに空白を記述してもかまいません。
ラベル
ObjectScript コードの行は、オプションでラベル (タグとして) を含むことができます。ラベルは、コード内の行の場所を参照するハンドルとして機能します。ラベルはインデントされない識別子で、列 1 で指定されます。すべての ObjectScript コマンドは、インデントする必要があります。
ラベルには以下の名前付け規約があります。
-
最初の文字は、英数字またはパーセント記号 (%) でなくてはなりません。ラベルは、先頭を数字とすることができる唯一の ObjectScript 名であることに注意してください。2 番目以降の文字はすべて英数字でなくてはなりません。ラベルは Unicode 文字を含めることができます。
-
最大長は 31 文字です。ラベルは、31 文字よりも長くすることができますが、最初の 31 文字は一意である必要があります。ラベル参照は、ラベルの最初の 31 文字のみと一致します。ただし、ラベルまたはラベル参照 (最初の 31 文字だけでなく) の文字はすべて、ラベル文字の名前付け規約に従う必要があります。
-
ラベルは大文字と小文字を区別します。
CREATE PROCEDURE や CREATE TRIGGER などの SQL コマンドで指定した ObjectScript コードのブロックではラベルを使用できます。この場合は、ラベルの先頭文字の前の 1 カラムに、接頭文字としてコロン (:) を記述します。ラベルのそれ以降の部分は、ここで説明する命名と使用方法の要件に従います。
ラベルではパラメータの括弧を含めたり省略することができます。括弧を含めた場合、その中を空にしたり、またはコンマ区切りのパラメータ名を 1 つ以上含めることができます。括弧付きのラベルによりプロシージャ・ブロックが識別されます。
行は、ラベルだけで構成できます。ラベルの次に 1 以上のコマンド、またはラベルの次に 1 コメントなどです。コマンドまたはコメントが、同じ行のラベルの後に続く場合、スペースまたはタブ記号を使って両者を区別する必要があります。
以下は、すべて一意のラベルです。
maximum
Max
MAX
%control
$ZNAME 関数を使用すれば、ラベル名を検証することができます。ラベル名を検証する場合には、パラメータの括弧を含めないでください。
ラベルは、コード・セクションの認識およびフロー・コントロールの管理に役立ちます。"従来のコードとラベル" を参照してください。
コメント
コードでコメントを使用してインラインのドキュメントを提供するのは適切な方法です。コメントは、コードの変更またはメンテナンス時に大切な情報源になります。ObjectScript では、いくつかの種類のコメントをサポートしており、さまざまな場所で使用できます。
INT コードのルーチンおよびメソッドに使用するコメント
ObjectScript コードは MAC コードとして記述され、その MAC コードから INT (中間) コードが生成されます。MAC コードに記述したコメントは通常、対応する INT コードで利用できます。ZLOAD コマンドを使用して INT コード・ルーチンをロードしてから、ZPRINT コマンドまたは $TEXT 関数を使用して、以下のコメントを含む INT コードを表示できます。以下のタイプのコメントを使用できます。これらのコメントはすべて 2 列目以降から開始する必要があります。
-
/* */ 複数行コメントは、1 行または複数行にわたって記述できます。/* は、行の最初の要素として、または他の要素の後に配置できます。*/ は、行の最後の要素として、または他の要素の前に配置できます。/* */ の間のすべての行が INT コードに表示されます。これには、/* または */ のみで構成される行も含まれますが、完全に空白の行は含まれません。複数行コメント内の空白行は INT コードから省略されるため、行数に影響する可能性があります。
-
// コメントは、行の残りの部分がコメントであることを示します。このコメントは、行の最初の要素として、または他の要素の後に配置できます。
-
; コメントは、行の残りの部分がコメントであることを示します。このコメントは、行の最初の要素として、または他の要素の後に配置できます。
-
; コメントの特殊なケースである ;; コメントは、ルーチンがオブジェクト・コードとして配信される場合にのみ、$TEXT 関数で使用できます。行内でこのコメントの前にコマンドがない場合に、$TEXT 関数でのみ使用可能です。
Note:InterSystems IRIS は、;; コメントをオブジェクト・コード (実際に解釈され、実行されるコード) に保持するため、このコメントを挿入するとパフォーマンスに影響します。そのため、ループ内には配置しないでください。
複数行コメント (/* comment */) はコンマ区切り文字前後の、コマンドもしくは関数の引数の間に置くことができます。複数行コメントを引数内に置いたり、コマンドのキーワードと最初の引数の間、もしくは関数キーワードと最初の括弧の間に置くことはできません。同一行で複数行コメントを 2 つのコマンドの間に置くことはできます。その場合、コマンドを区切るために必要な 1 つの空白として機能します。同一行で複数行コメント (*/) の直後にコマンドを続けたり、同一行で単数行コメントを続けることもできます。行中に /* comment */ を挿入する例を以下に示します。
WRITE $PIECE("Fred&Ginger"/* WRITE "world" */,"&",2),!
WRITE "hello",/* WRITE "world" */" sailor",!
SET x="Fred"/* WRITE "world" */WRITE x,!
WRITE "hello"/* WRITE "world" */// WRITE " sailor"
MAC コードのルーチンおよびメソッドに使用するコメント
以下のコメント・タイプは MAC コードに記述できますが、対応する INT コードでは別の動作となります。
-
#; コメントは、任意の列から開始できますが、その行の最初の要素でなければなりません。#; コメントは、INT コードには表示されません。コメントもコメント・マーカ (#;) も INT コードには表示されず、空白行も保持されません。このため、#; コメントによって、INT コードの行番号が変わる可能性があります。
-
##; コメントは任意の列から開始できます。また、その行で最初の要素になることができ、他の要素に続けることもできます。##; コメントは、INT コードには表示されません。##: は、ObjectScript コード内や埋め込み SQL コード内、あるいは #define、#def1arg、または ##continue の各マクロ・プリプロセッサ指示文と同一行に使用できます。
##; コメントが列 1 から開始される場合、コメントもコメント・マーカ (##;) も INT コードには表示されず、空白行も保持されません。ただし、##; コメントが列 2 以降から開始される場合、コメントもコメント・マーカ (##;) も INT コードには表示されませんが、空白行は保持されます。この使用法では、##; コメントによって INT コードの行番号が変わることはありません。
-
/// コメントは、任意の列から開始できますが、その行の最初の要素でなければなりません。/// が列 1 から開始される場合、INT コードには表示されず、空白行も保持されません。/// が列 2 以降から開始される場合、このコメントは INT コードに表示され、// コメントであるかのように扱われます。
メソッド・コードの外部のクラス定義に使用するコメント
メソッド定義の外部のクラス定義で、いくつかの種類のコメントを使用できます。これらのコメントはすべて任意の列から開始できます。
-
// コメントおよび /* */ コメントは、クラス定義で使用するコメントです。
-
/// コメントには、その直後のクラスまたはクラス・メンバのクラス・リファレンスのコンテンツを記述します。クラス自体に対しては、クラス定義の開始前に配置される /// コメントには、クラスリファレンスのコンテンツとしてそのクラスの説明が記述されます。このコンテンツは、クラスに関する説明のキーワード値にもなります。クラス内では、メンバの直前 (クラス定義の開始位置以降、または前のメンバの後) に配置される /// コメントにはすべて、そのメンバのクラス・リファレンスのコンテンツが記述されます。複数行の記述は、HTML の 1 つのブロックとして扱われます。/// コメントの規則の詳細およびクラス・リファレンスは、"クラス・ドキュメントの作成" を参照してください。
ネームスペース
ネームスペース名は、明示的なネームスペース名または暗黙的なネームスペース名になります。明示的なネームスペース名は大文字と小文字を区別しません。入力時においての大文字と小文字に関係なく、常に大文字で格納と返送が行われます。
明示的なネームスペース名では、最初の文字は、英字またはパーセント記号 (%) に限られます。残りの文字は、英字、数字、ハイフン (–)、またはアンダースコア (_) にする必要があります。この名前は、255 文字以内にする必要があります。
InterSystems IRIS で、明示的なネームスペース名をルーチン名またはクラス名に変換するとき (キャッシュしたクエリ・クラス/ルーチン名の作成時など) は、句読文字が % = p、_ = u、– = d のように小文字に置き換えられます。暗黙のネームスペース名には、これら以外の句読文字が使用されていることがありますが、そのようなネームスペース名の変換では、それらの句読文字が小文字の "s" に置き換えられます。したがって、7 つの句読点文字は次のようになります。@ = s、: = s、/ = s、\ = s、[ = s、] = s、^ = s。
予約済みのネームスペース名は、%SYS、BIN、BROKER、および DOCUMATIC です。
InterSystems SQL CREATE DATABASE コマンドを使用した場合、SQL データベースの作成により、対応する InterSystems IRIS ネームスペースが作成されます。
InterSystems IRIS のインスタンスでは、ネームスペースはディレクトリとして存在します。現在のネームスペースのフル・パス名を返すには、以下の例に示すように、NormalizeDirectory()Opens in a new tab メソッドを呼び出します。
WRITE ##class(%Library.File).NormalizeDirectory("")
ネームスペースの使用の詳細は、"ネームスペースとデータベース" を参照してください。ネームスペースの作成の詳細は、"ネームスペースの構成" を参照してください。