プロパティの定義と使用
プロパティは、あらゆるオブジェクト・クラスで定義できます。ここでは、概要について説明します。
プロパティの種類
オブジェクト・クラスには、以下の種類のプロパティの任意の組み合わせを含めることができます。
-
リテラル・プロパティ。プロパティはリテラル値を保持します。
-
ストリーム・プロパティ。プロパティは、値を保持するグローバルへのアクセスを提供するストリーム・クラスです。この場合、値は極端に大きいデータ (文字列長の制限値より長い) にすることができます。
-
オブジェクト値プロパティ。プロパティはオブジェクト・クラスです。
-
シリアル・プロパティ。プロパティはシリアル・オブジェクト・クラスです。
-
コレクション・プロパティ。プロパティは、値のコレクション (配列またはリスト) へのアクセスを提供する特殊なオブジェクトです。コレクションはリテラル値またはオブジェクトのいずれかで構成できます。
-
リレーションシップ。プロパティは、別のオブジェクト・クラスを参照し、接続された 2 つのクラスに特定の形式の制約を追加する、特殊なオブジェクトです。これらは、永続クラスでのみサポートされます。
プロパティの定義
プロパティをクラス定義に追加するには、以下のいずれかのような要素をクラスに追加します。
Property PropName as Classname;
Property PropName as Classname [ Keywords ] ;
Property PropName as Classname(PARAM1=value,PARAM2=value) [ Keywords ] ;
Property PropName as Classname(PARAM1=value,PARAM2=value) ;
以下はその説明です。
-
PropName は、プロパティの名前です。
-
Classname は、このプロパティが基づくクラスです。これを省略すると、Classname は既定の最大長が 50 文字の %StringOpens in a new tab であると見なされます。Classname は、データ型クラス (リテラル・プロパティになります)、オブジェクト・クラス、またはシリアル・オブジェクト・クラスのいずれかになります。
また、以下の構文のバリエーションを使用して、それぞれリスト・プロパティまたは配列プロパティを作成することもできます。
Property PropName As list of Classname;
Property PropName As array of Classname;
-
Keywords はプロパティ・キーワードを表します。"コンパイラ・キーワードの概要" を参照してください。
-
PARAM1、PARAM2 などはプロパティ・パラメータです。使用可能なパラメータは、プロパティで使用されるクラスによって異なります。
プロパティ・パラメータを含める場合は、パラメータを括弧で囲み、プロパティ・キーワードの前に置きます。プロパティ・キーワードを含める場合は、これを角括弧で囲み、プロパティ定義の末尾に置きます。
プロパティへの値の割り当て
プロパティに値を割り当てるには、非常に簡単なケースでは、以下を実行します。
-
含まれているクラスのインスタンスを作成するか、開いて、そのインスタンスへの OREF を取得します。
-
SET コマンドとドット構文を使用して、次のように値を割り当てます。
Set oref.PropertyName = value
oref は、最初の手順で返された OREF、PropertyName はこのオブジェクトのプロパティ名、value はこのプロパティに適した値です。
-
これがリテラル・プロパティの場合、value はリテラル値に評価される必要があります。
-
プロパティがオブジェクト (シリアル・オブジェクトを含む) の場合、value は該当するオブジェクト・クラスを参照する OREF である必要があります。
-
詳細は、コレクション・プロパティ、リレーションシップ、ストリーム・プロパティで多少異なります。これらはすべて、データにアクセスするための API を提供するオブジェクト・クラスです。以下に、Sample.Person オブジェクトの FavoriteColors プロパティの最初のリスト項目を設定する例を示します。
set oref.FavoriteColors.GetAt(1)="red"
別の例として、以下ではストリーム・プロパティにデータを書き込みます。
Do person.Memo.Write("This is some text. ")
Do person.Memo.Write("This is some more text.")
プロパティ値の参照
プロパティ値を参照するには、非常に簡単なケースでは、以下を実行します。
-
含まれているクラスのインスタンスを作成するか、開いて、そのインスタンスへの OREF を取得します。
-
ドット構文を使用して、プロパティを参照します。
Set newvariable = oref.PropertyName
oref は、最初の手順で返された OREF、PropertyName はこのオブジェクトのプロパティ名です。
詳細は、コレクション・プロパティ、リレーションシップ、ストリーム・プロパティで多少異なります。これらはすべて、データにアクセスするための API を提供するオブジェクト・クラスです。以下に、Sample.Person オブジェクトの FavoriteColors プロパティから最初のリスト項目を取得する例を示します。
Set newvariable=oref.FavoriteColors.GetAt(1)
同様に、以下では、ストリーム・プロパティからコンソールにデータを書き込みます。
Write person.Memo.Read()
プロパティ・メソッドの使用法
すべてのプロパティは、生成されたメソッドのセットをクラスに追加します。これらのメソッドには、propnameIsValid()、propnameLogicalToDisplay()、propnameDisplayToLogical()、propnameLogicalToOdbc()、propnameOdbcToLogical() などが含まれます。propname はプロパティの名前です。メソッドの詳細とリストは、"プロパティ・メソッドの使用法" を参照してください。
InterSystems IRIS はこれらのメソッドを内部的に使用し、ユーザもこれらを直接呼び出すことができます。どの場合も、引数はプロパティ値です。例えば、Sample.Person に論理値 M と F (および表示値 Male と Female) を持つ Gender という名前のプロパティがあるとします。次のように、指定されたレコードに対してこのプロパティの論理値と表示値を表示できます。
MYNAMESPACE>set p=##class(Sample.Person).%OpenId(1)
MYNAMESPACE>w p.Gender
M
MYNAMESPACE>w ##class(Sample.Person).GenderLogicalToDisplay(p.Gender)
Male
関連項目
-
オブジェクト値プロパティの定義と使用 (シリアル・プロパティを含む)