EGL における参照変数および NIL

パラメーターや変数はメモリーの一領域です。 変数には、例えば特定の名前や従業員 ID など、重要な業務データが含まれている場合があります。 また、変数が参照変数の場合もあります。 参照変数は、実行時にビジネス・データにアクセスするためのメモリー・アドレスを含みます。

EGL の参照変数は、以下のパーツのいずれかに基づいています。 これらもそれぞれ、参照型 と呼ばれています。

Service パーツおよび Interface パーツ以外については、前述のパーツのいずれもユーザーが定義する必要はありません。 これらは、EGL で事前定義されています。

このことにより、以下のような影響があります。
初期化で
参照変数を宣言すると、EGL は通常、変数を値 NIL に初期化します。 これは、変数がどのビジネス・データも指していないことを示します。 以下のケースでは、値 NIL が初期値ではありません。
  • 変数が、定義時に初期化されるフィールド組み込むパーツに基づいている場合、または
  • 変数宣言に値の設定ブロックが含まれている場合、または
  • キーワード new を使用して、実行時にメモリー領域を割り当てる場合 (ConsoleField、Service、および Interface 以外のすべての参照型で可能)。 以下に例を示します。
      myPrompt Prompt = new Prompt {message = "Type your ID");

    キーワード new の詳細については、『ConsoleUI および EGL レポート内での new の使用』を参照してください。

参照変数の配列を宣言するときは (たとえば MenuItem[3])、上記の規則は、 配列内の各エレメントについても該当します。

代入文で
参照変数を他の参照変数に代入した後は、 ソースとターゲットはそれぞれ、同一のメモリー領域をアクセスする値を含みます。 参照変数は、同じパーツをベースとした参照変数に対してのみ代入することができます。 インターフェース・パーツまたはサービス・パーツの場合は、あるパッケージ内で定義されたパーツは、 別のパッケージ内で定義されたパーツと同一ではありません (パーツ名が同一の場合でも)。
注: 非参照変数を別の非参照変数に代入した場合は、以下のように状況が異なります。
  • ソースとターゲットはそれぞれ、同一のビジネス・データのコピーを含みます。 例えば、代入文の非参照ソース変数が特定の従業員 ID を含む場合、 その文によって、ターゲット変数もその ID を含むようになります。
  • 代入の互換性』で説明されているように、 両変数は異なる型であることが可能です。
比較で
等価 (==) および不等価 (!=) についてテストする演算子は、参照変数の比較に使用できます。 比較は、変数が参照するメモリー領域に基づいて行われます。 2 つの変数が異なるメモリー領域を参照する場合は、 たとえビジネス・データが等しくても、2 つの変数は不等です。
関数呼び出しで
参照変数は、引数と同型のパラメーターにのみ受け渡すことができます。 インターフェース・パーツまたはサービス・パーツの場合は、あるパッケージ内で定義されたパーツは、 別のパッケージ内で定義されたパーツと同一ではありません (パーツ名が同一の場合でも)。 ただし、パラメーターが引数と同型であり、呼び出しがローカルの場合にのみ (具体的には、複合プロパティー @EGLBinding のフィールド commType の値が local の場合にのみ)、 参照変数をサービス関数に受け渡すことができます。

この関数は常に、受け渡される変数のコピーを受け取ります。
  • パラメーターによって参照されるデータに異なるデータを代入する (たとえば、コンソール・フィールドのカラーを変更する) と、呼び出し側の関数が使用するデータが変わります。
  • ただし、呼び出し先関数で代入文の左側のパラメーターを使用しても、 呼び出し元の関数には影響はありません。 代入を行った後は、パラメーターは、代入文の右側の変数で参照されているものと同じメモリー領域を参照しますが、 呼び出し元関数での引数は、この代入による影響を受けません。

パラメーターの修飾子 IN、OUT、および INOUT は、参照型のパラメーターに対しては有効ではありません。

どの参照型も、戻りの型として有効です。 これは、実行時に、アドレスのコピーが呼び出し元の関数に戻されることを意味します。 参照型が、呼び出し先関数のローカル変数として宣言されている場合でも、 ビジネス・データ (およびそのデータを保持するメモリー領域) は、呼び出し元関数で保持されます。

プログラムの呼び出しで
参照変数を他のプログラムに受け渡すことはできません。
PageHandlers で
参照変数を PageHandler の onPageLoad 関数に受け渡すことはできません。 また、参照変数をセッション・オブジェクトまたは要求オブジェクトに入れたり、 セッション・オブジェクトまたは要求オブジェクトの参照変数を取得することはできません。

関連リファレンス
EGL での参照の互換性
ConsoleUI および EGL レポート内での new の使用

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.