識別子のルールとガイドライン
ここでは、ObjectScript コード内およびクラス内の識別子のルールについて説明し、名前競合を回避するためのガイドラインを示します。ObjectScript には予約語がありません。そのため、識別子としてコマンドを使用しても結果は構文的に正しくなりますが、そのコードはそれを読む人にわかりにくくなる可能性があります。
ネームスペースおよびデータベースの識別子については、"システム管理ガイド" の関連するセクションを参照してください。
ユーザ、ロール、リソースなどのセキュリティ・エンティティの識別子については、"承認ガイド" の関連するセクションを参照してください。
"ネームスペースで何にアクセス可能か" も参照してください。
ローカル変数名のルール
ローカル変数の名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
% で始まる名前にする場合、その直後の文字は z または Z にします。
-
残りの文字は、英字または数字にする必要があり、ASCII 255 より大きい文字 (Unicode 文字) も使用できます。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字が (該当するコンテキストで) 一意である必要があります。
変数の添え字は、このカウントに含まれません。
回避する必要があるローカル変数名
ローカル変数に対して以下の名前は使用しないでください。
-
SQLCODE
InterSystems SQL が実行される可能性があるコンテキストでは、変数の名前として SQLCODE を使用しないでください。"SQLCODE 値とエラー・メッセージ" を参照してください。
-
IO、IOF、IOBS、IOM、IOSL、IOT、IOST、IOPAR、MSYS、POP、RMSDF
^%IS ユーティリティを使用するコンテキスト (実際には、これはまれです) では、これらの変数名を使用しないでください。"入出力の概要" を参照してください。
グローバル変数名のルール
グローバル変数の名前については、以下のルールが適用されます。
-
最初の文字はキャラット (^) にし、次の文字は英字かパーセント記号 (%) にする必要があります。グローバル名の場合、文字は ASCII 65 から ASCII 255 の範囲のアルファベット文字として定義されます。ASCII 255 より大きい文字は許可されていません。
-
残りの文字は、英字または数字にする必要があります (ただし、次の箇条書きに示すように例外が 1 つあります)。
-
グローバル変数の名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字が (該当するコンテキストで) 一意である必要があります。キャラット文字はこのカウントに含まれません。つまり、グローバル変数の名前は、キャラットを含めて最初の 32 文字が一意である必要があります。
変数の添え字は、このカウントに含まれません。
-
IRISSYS データベースでは、グローバル名はすべて予約されていますが、先頭に ^z、^Z、^%z、^%Z が付くものについては例外です。"IRISSYS のカスタム項目" を参照してください。
他のすべてのデータベースでは、先頭に ^IRIS または ^%IRIS が付くグローバル名はすべて予約されています。
"回避する必要があるグローバル変数名" も参照してください。
回避する必要があるグローバル変数名
データベースを作成すると、InterSystems IRIS によって、それ自体が使用するためのいくつかのグローバルでそれが初期化されます。また、作成するネームスペースすべてに、システム・グローバルへのマッピングが含まれます。これには、書き込み可能システム・データベース内のグローバル・ノードも含まれます。
パーセント・グローバル
パーセント・グローバルはすべてのネームスペースで使用できます。以下のルールが適用されます。
-
名前の先頭に ^%z または ^%Z が付く独自のグローバルを設定、変更、または削除できます ("IRISSYS のカスタム項目" を参照)。
-
^%SYS を設定、変更、または削除することはできません (ドキュメントに記載されているようにノードを設定する場合を除く)。
-
前述の例外を除き、名前の先頭に ^% が付くグローバルを設定、変更、または削除することはできません。
非パーセント・グローバル
システム・グローバルを上書きしないようにするために、ネームスペースでは以下のグローバルを設定、変更、または削除しないでください。
-
^CacheTemp* (InterSystems IRIS の一部のバージョンで使用するために予約されています)
-
^DeepSee.* (制限は、InterSystems IRIS Analytics を使用しているネームスペースにのみ適用されます)
-
^Ens* (制限は、相互運用対応ネームスペースにのみ適用されます。"相互運用プロダクションの概要" を参照してください。)
-
^ERRORS
-
^HS (制限は、HealthShare ネームスペースに適用されます)
-
^InterSystems.Sequences (制限は、InterSystems IRIS Hibernate Dialect を使用しているネームスペースにのみ適用されます)
-
^IRIS* (インターシステムズで使用するために予約されています)
-
^IS.* (InterSystems IRIS のシャーディングで使用するために予約されています)
-
^ISC* (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^mqh (SQL クエリの履歴)
-
^mtemp*
-
^OAuth2 (制限は、HealthShare ネームスペースに適用されます)
-
^OBJ.GUID (ドキュメントに記載されている場合を除く)
-
^OBJ.DSTIME
-
^OBJ.JournalT
-
^odd*
-
^rBACKUP
-
^rINC (インクルード・ファイルを含む)
-
^rINCSAVE
-
^rINDEX
-
^rINDEXCLASS
-
^rINDEXEXT
-
^rINDEXSQL
-
^rMAC (MAC コードを含む)
-
^rMACSAVE
-
^rMAP
-
^rOBJ (OBJ コードを格納する)
-
^ROUTINE (ルーチンを格納する)
-
^SchemaMap (制限は、HealthShare ネームスペースに適用されます)
-
^SPOOL (制限は、InterSystems IRIS スプーリングを使用しているネームスペースにのみ適用されます。"スプール・デバイス" を参照してください。)
-
^SYS (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^z* および ^Z* (IRISSYS データベースの場合を除き、インターシステムズで使用するために予約されています。"IRISSYS のカスタム項目" を参照してください。)
ルーチン名とラベルのルール
ルーチンまたはラベルの名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
ルーチン名の先頭を % にした場合、その直後の文字には z または Z を使用します。"IRISSYS のカスタム項目" を参照してください。
-
残りの文字は、英字または数字にする必要があります (ただし、例外が 1 つあります。次の箇条書きを参照してください)。これらの他の文字に、ASCII 128 より大きい任意の文字を使用できます。
Unicode 文字を処理する際に、ロケール識別子は考慮されません。つまり、Unicode 文字で構成される識別子が、あるロケールで有効な場合、その識別子はどのロケールでも有効です。
-
ルーチンの名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
ルーチンの名前は、最初の 255 文字以内で一意 (該当するコンテキスト内) であることが必要です。
ラベルは、最初の 31 文字以内で一意 (該当するコンテキスト内) であることが必要です。
特定の Z および %Z ルーチン名は、ユーザが使用するために予約されています。
ユーザが使用するために予約されているルーチン名
InterSystems IRIS では、ユーザが使用するために、以下のルーチン名が予約されています。これらのルーチンは存在しませんが、それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって自動的に呼び出されます。
-
^ZWELCOME ルーチンは、ObjectScript シェルが起動したときに実行されるカスタム・コードを含めることを目的としています。"ObjectScript シェルの使用法" を参照してください。
-
^ZAUTHENTICATE および ^ZAUTHORIZE ルーチンは、認証および承認のためのカスタム・コードを含めることを目的としています (代行認証と代行承認をサポートするため)。このようなルーチンのために、InterSystems IRIS にはテンプレートが用意されています。"代行承認の使用法" と "代行認証" を参照してください。
-
^ZMIRROR ルーチンは、InterSystems IRIS ミラーリングを使用する場合の、フェイルオーバー動作をカスタマイズするためのコードを含めることを目的としています。"高可用性ガイド" を参照してください。
-
^%ZSTART および ^%ZSTOP ルーチンは、ユーザ・ログインなどの特定のイベントが発生したときに実行されるカスタム・コードを含めることを目的としています。これらのルーチンは事前定義されません。それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって呼び出されます。"^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ" を参照してください。
-
^%ZLANGV00、および名前が ^%ZLANG で始まるその他のルーチンは、カスタム変数、コマンド、および関数を含めることを目的としています。"%ZLANG ルーチンによる言語の拡張" を参照してください。
-
^%ZJREAD ルーチンは、^JCONVERT ルーチンを使用する場合にジャーナル・ファイルを操作するためのロジックを含めることを目的としています。"ジャーナリングの概要" を参照してください。
クラス名のルール
どのクラスも、完全クラス名は packagename.classname の形式です。
クラス名のルールは、以下のとおりです。
-
packagename (パッケージ名) および classname (短いクラス名) は英字またはパーセント記号 (%) で始まる必要があります。
パッケージ名の先頭を % にした場合、その直後の文字には z または Z を使用します。"IRISSYS のカスタム項目" を参照してください。
-
packagename にはピリオドを含めることができます。
その場合、ピリオドの直後の文字は英字にする必要があります。
packagename のピリオドで区切られた各部は、サブパッケージ名として扱われ、一意性のルールに従います。
-
残りの文字は、英字または数字にする必要があり、ASCII 128 より大きい文字も使用できます。
Unicode 文字を処理する際に、ロケール識別子は考慮されません。つまり、Unicode 文字で構成される識別子が、あるロケールで有効な場合、その識別子はどのロケールでも有効です。
-
パッケージ名と短いクラス名は一意である必要があります。同様に、サブパッケージ名は、親パッケージ名内で一意である必要があります。
各クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、大文字と小文字のみが違う 2 つの識別子を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
以下のように長さの制限があります。
-
パッケージ名 (すべてのピリオドを含む) は最初の 189 文字内で一意である必要があります。
-
短いクラス名は最初の 60 文字内で一意である必要があります。
完全なクラス名は、クラス・メンバの個別の長さ制限に寄与します。
-
回避する必要があるパッケージ名、クラス名、およびスキーマ名
永続クラスについては、クラスの短い名前として SQL 予約語を使用しないでください。
クラスの短い名前として SQL 予約語を使用する場合、そのクラスに対して SqlTableName キーワードを指定することが必要になります。また、短いクラス名と SQL テーブル名の間に不一致があると、将来コードを読むときに注意が必要になります。
SQL 予約語のリストは、"予約語" を参照してください。
以下のパッケージ名を使用することは避けてください (ネームスペースによります)。これらのパッケージ名をスキーマ名として使用することもできません。
-
いずれのネームスペースでも、IRIS をパッケージ名として使用しないでください。これは、インターシステムズで使用するために予約されています。
-
いずれのネームスペースでも、INFORMATION をパッケージ名として使用しないでください。これは、すべてのネームスペースにマッピングされるシステム・パッケージです。
-
いずれの相互運用対応ネームスペースでも、Ens、EnsLib、EnsPortal、および CSPX をパッケージ名として使用しないでください。これらのパッケージは、アップグレード・プロセス中に完全に置換されます。これらのパッケージ内でクラスを定義した場合は、アップグレード前にそれらのクラスをエクスポートして、アップグレード後にインポートする必要があります。
-
いずれの相互運用対応ネームスペースでも、先頭に Ens (大文字と小文字の区別あり) が付くパッケージ名を使用しないでください。詳細は、"環境上の考慮事項" を参照してください。
-
HealthShare ネームスペースでは、HS、HSFHIR、HSMOD、および SchemaMap をパッケージ名として使用しないでください。
クラス・メンバ名のルール
クラス・メンバについては、その項目の名前が範囲指定されていない限り、名前は以下のルールに従う必要があります。
-
名前は、英字かパーセント記号 (%) で始まる必要があります。
SQL に投影されるクラス・メンバについては、その他の考慮事項があります (例えば、このメンバには永続クラスのほとんどのプロパティが含まれます)。最初の文字が % である場合、2 番目の文字は Z または z である必要があります。
-
残りの文字は、英字または数字にする必要があり、ASCII 128 より大きい文字も使用できます。
-
メンバ名は (該当するコンテキスト内で) 一意である必要があります。
クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、2 つのクラス・メンバに、大文字と小文字のみが違う名前を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
メソッドまたはプロパティ名は最初の 180 文字内で一意である必要があります。
-
プロパティの名前の長さと、そのプロパティのインデックスの名前の長さを合わせた長さは、180 文字を超えてはいけません。
-
各メンバの完全な名前 (未修飾のメンバ名および完全なクラス名を含む) は、220 文字以下である必要があります。
-
2 つのメンバに同一の名前を付与しないでください。予測できない結果となる可能性があります。
メンバ名の範囲を指定することもできます。範囲指定したメンバ名を作成するには、名前の最初と最後の文字に二重引用符を使用します。これにより、範囲指定しない場合には許可されない文字を名前に含めることができます。以下に例を示します。
Property "My Property" As %String;
回避する必要があるメンバ名
永続クラスについては、メンバの名前として SQL 予約語を使用しないでください。
これらの名前の 1 つに SQL 予約語を使用すると、そのクラスを SQL に投影する方法を指定するときに余分な作業が必要になります。例えば、プロパティの場合、SqlFieldName キーワードを指定する必要があります。また、クラスの識別子と SQL の識別子の間に不一致があると、将来コードを読むときに注意が必要になります。
SQL 予約語のリストは、"予約語" を参照してください。このリストには、%SQLUPPER や %FIND のように、名前が % で始まる項目が数多く含まれている点に注目してください。このような項目は、SQL に対する InterSystems 拡張機能です。将来のリリースで、その他の拡張機能が追加される可能性もあります。
IRISSYS のカスタム項目
IRISSYS データベースに項目を作成できます。アップグレード時に、カスタム項目の名前付け規約に従っていないと、いくつかの項目が削除されます。
項目が上書きされないようにこのデータベースにコードまたはデータを追加するには、以下のいずれかを実行します。
-
%SYS ネームスペースに移動し、項目を作成します。このネームスペースの場合、既定のルーチン・データベースおよび既定のグローバル・データベースは、どちらも IRISSYS です。以下の名前付け規約を使用して、項目がアップグレード・インストールの影響を受けないようにします。
-
クラス : パッケージを Z または z で始めます。
-
ルーチン : 名前を Z、z、%Z、または %z で始めます。
-
グローバル : 名前を ^Z、^z、^%Z、または ^%z で始めます。
-
-
どのネームスペースでも、以下の名前で項目を作成します。
-
ルーチン : 名前を %Z または %z で始めます。
-
グローバル : 名前を ^%Z または ^%z で始めます。
ネームスペースの標準マッピングにより、これらの項目は IRISSYS に書き込まれます。
-
MAC コードとインクルード・ファイルはアップグレードによる影響を受けません。