EGL パーツで変数または定数を宣言した場合、宣言の中で使用された識別子は、そのパーツ全体で
有効範囲内 (使用可能) となります。
- 宣言が 1 つの関数の中で行われた場合、識別子はその関数のローカルな有効範囲内に置かれます。例えば、関数 Function01 で変数 Var01 を宣言した場合、Function01 内のすべてのコードで Var01 を参照できます。この識別子は、宣言より前に置かれた関数コード内でも使用可能です。
この変数を、引数として別の関数に渡すことができますが、元の識別子をその関数の中で使用することはできません。
このパラメーター名が、受け取り側の関数内で使用可能なのは、そのパラメーター名がそこで宣言されていたからです。
- 宣言がプログラムなどの生成可能パーツ内にあり、どの関数内にもない場合、識別子はプログラム・グローバルな有効範囲 内にあります。つまり、そのパーツによって呼び出されるすべての関数で、その識別子を参照できます。例えば、プログラムが Var01 を宣言して Function01 を呼び出し、Function01 が Function02 を呼び出す場合でも、Var01 を両方の関数のどこからでも使用できます。
テキスト書式または印刷書式の中に置かれた識別子は、その書式を参照する生成可能パーツに対してグローバルです。それらの識別子は、その書式を表示する関数より前に置かれた関数の中でも使用できます。
- 宣言がライブラリー内にあり、どの関数内にもない場合、識別子は実行単位の有効範囲 内にあります。つまり、その実行単位内のすべてのコードに対してグローバルです。
- dataTable の名前とそのフィールドは、dataTable のプロパティーの設定と、その dataTable が存在する環境に応じて、プログラム・グローバルな有効範囲、実行単位の有効範囲、またはそれより大きい有効範囲の中に置くこともできます。
同一の識別子を同じ有効範囲の中に置くことはできません。しかし、ほとんどの識別子は、論理的にコンテナー (レコードなど) の内部にあるメモリー領域を参照します。また、そのような場合、コードでは、その識別子を格納しているコンテナーの名前で識別子を修飾します。例えば、関数変数 myString が myRecord01 というレコード内にある場合、コードでは、次のように、その変数をレコードのフィールドとして参照します。
myRecord01.myString
同じ識別子が 2 つの有効範囲内にある場合、その識別子への参照は、すべて最もローカルな有効範囲への参照となりますが、次のように修飾子を使用して、その振る舞いをオーバーライドできます。
- あるプログラムが変数 Var01 を宣言して関数を呼び出しており、その関数自体が同じ名前の変数を宣言している場合を考えてみます。その関数内での Var01 への非修飾参照は、ローカルに宣言された変数にアクセスします。
ローカル識別子が優先されるときでもプログラム・グローバルな識別子にアクセスするには、次の例のように、識別子をキーワード
this で修飾します。
this.Var01
まれな例ですが、キーワード this は、assignment
文での値の設定ブロックの振る舞いをオーバーライドするためにも使用されます。詳細については、『値の設定ブロック』を参照してください。
- 次のような事例を考えてみます。
- プログラムには、ライブラリーにアクセスするための使用宣言があります。また、
- このプログラムとライブラリーは、それぞれが、Var01 という名前の変数を宣言しています。
プログラム内の関数に Var01 への非修飾参照が含まれている場合、その関数はプログラム変数にアクセスします。
実行単位の有効範囲内の識別子に、たとえ別の識別子によって防止されてもアクセスしたい場合には、次の例のように、識別子をパーツ名で修飾します (この例では myLib がライブラリーの名前です)。
myLib.Var01
ライブラリーまたは dataTable が別のパッケージ内にあり、そのパーツを import ステートメントの中で参照していない場合は、次の例のように、パーツ名の前にパッケージ名を付けます (この例では、myPkg がパッケージ名です)。
myPkg.myLib.Var01
パッケージ名は常にパーツ名を修飾し、変数や定数の識別子の直前に置くことはできません。
最後に、ローカル識別子が dataTable またはライブラリーの存在する場所と異なるパッケージ内にある場合は、ローカル識別子を dataTable 名またはライブラリー名と同じものにすることができます。その dataTable 名またはライブラリー名を参照するには、パッケージ名を組み込みます。