宣言のスコープ

スコープは、変数、プロシージャ、クラス、または型が宣言されるコンテキストです。スコープは、項目が宣言されたコンテキストの外側で、その項目にアクセスできるかどうかに影響します。例えば、プロシージャの中で宣言された変数は、通常はそのプロシージャのスコープの外側では利用できません。

LotusScript® では、次の 3 種類のスコープが認識されます。

名前の競合と隠ぺい

同じ名前の 2 つの変数やプロシージャは、同じスコープ内で宣言できません。その結果は、名前の競合となります。コンパイラでスクリプト内に名前の競合が見つかると、エラーになります。

異なるスコープで宣言された変数やプロシージャは、同じ名前であっても構いません。そのような名前が参照に使用されるとき、LotusScript は最も深いスコープで宣言された変数やプロシージャを参照すると解釈します。

最も深いスコープの外のスコープで宣言される同じ名前の変数やプロシージャには、アクセスできません。この効果は隠ぺいと呼ばれます。つまり、外側の名前の宣言は隠されて、内側の宣言からは見えません。

モジュールスコープ

宣言がモジュール内のプロシージャ、クラス、または型定義の外側にあれば、変数はモジュールのスコープ内で有効になります。モジュールがロードされている間は、変数名は意味のあるものとなります。

変数名はモジュール内でどこからでも参照でき、同じ名前の変数を宣言しているプロシージャ、型、またはクラスの外であれば、宣言で指定された意味を持ちます。

既定では、変数は Private で、それを宣言したモジュールの中でだけ参照できます。他のモジュールから変数を参照するときは、Public として宣言します。他のモジュールが変数を定義しているモジュールにアクセスするには、Use ステートメントを使用します。

モジュール間で名前の競合を生じるのは次の場合です。

モジュール内で名前の競合を生じるのは次の場合です。

プロシージャスコープ

宣言が関数、サブルーチン、またはプロパティの定義の中にあれば、変数はプロシージャのスコープ内で有効になります。変数名が宣言で指定した意味を持つのは、そのプロシージャ内のみです。変数名は、プロシージャ内でどこからでも参照できます。

通常、変数はプロシージャが呼び出されたときに作成され初期化されます。プロシージャが終了すると、変数も削除されます。Static キーワードを使用することによって、その処理を変更できます。

プロシージャ内で名前の競合が生じるのは次の場合です。

型またはクラスのスコープ

宣言が型またはクラスの定義の中にあれば (クラスの場合、プロシージャの定義の外も含む)、変数は型またはクラスのスコープ内で宣言されます。このような変数は、その型やクラスのメンバ変数と呼ばれます。

型のメンバ変数 (常に Public) と Public クラスのメンバ変数の参照は、どの型やオブジェクトの場合でも、そのインスタンスを参照するインスタンス変数の宣言に依存します。

型の中で名前の競合が生じるのは次の場合です。

クラス内で名前の競合が生じるのは次の場合です。