名前空間からの分類
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:22 UTC 版)
「スコープ (プログラミング)」の記事における「名前空間からの分類」の解説
大域スコープ (global scope) プログラムの「全体」から見えるスコープのこと。このスコープに属する変数は、グローバル変数または大域変数といわれる。BASICのような単純な言語では大域スコープしか存在しない場合がある。Pythonのようなグローバル変数の書き換えが簡単には行えない言語も存在する。 ファイルスコープ (file scope) 大域スコープと似ているが、プログラムを記述したファイルの内側でのみ参照できるスコープ。プログラムが複数のファイルから構成される場合は他のファイルから参照することはできない。 局所スコープ (local scope) ある関数やブロックの範囲内に限定されたスコープのこと。このスコープに属する変数は、ローカル変数と呼ばれる。何を持って範囲を与えるかは言語により様々だが、一般に入れ子のローカルスコープは外側を参照できるのが普通である。このとき兄弟関係にあるスコープは見えない。変数宣言が必要な言語の場合は宣言文以降にスコープが制限される場合が多い。 C言語およびC++では、関数内において外側のブロックに存在する識別子と同じ名前の識別子を内側のブロックで定義することができ、外側の識別子は内側の識別子で隠蔽されるが、JavaやC#では許可されない。 インスタンススコープ (instance scope) クラスベースのオブジェクト指向言語で、クラスの各インスタンスに割り当てられた変数(フィールド)や関数(メソッド)が、そのインスタンス経由でのみ参照されうるスコープのこと。このスコープに属する変数はインスタンス変数やメンバー変数とも呼ばれ、また関数はメンバー関数とも呼ばれる。インスタンス内で共有されるので、局所スコープよりも可視範囲が広くなる。当該クラスのメソッドの内部でこれらを参照するとき、通例thisやselfといったオブジェクト参照によりスコープを明示することで、メソッドの仮引数やローカル変数、あるいはローカル関数などと名前が衝突した場合にも区別できるようになっている。 C言語の構造体メンバー参照なども一種のインスタンススコープである。 クラススコープ (class scope) クラスベースのオブジェクト指向言語で、あるクラスの定義全体から参照できるスコープ。このスコープに属する変数はクラス変数とも呼ばれ、関数はクラスメソッドとも呼ばれる。クラス全体で共有されるので、ある種の制限された大域スコープと考えることもできる。クラス外からこれらを参照するとき、クラス名の修飾によりスコープを明示する。また、当該クラスのメソッドの内部でこれらを参照するとき、通例クラス名の修飾によりスコープを明示することで、メソッドの仮引数やローカル変数、あるいはローカル関数などと名前が衝突した場合にも区別できるようになっている。 クラススコープをもたない言語の場合でも、ファイルスコープを用いることで同様の機構を実現できる場合がある。 なお、オブジェクト指向言語は通例カプセル化のため、フィールドやメソッドについてアクセス可能な範囲(可視性)を指定できるアクセス修飾子(英語版)の機能を備えているが、アクセス修飾子によるアクセス制限とスコープの概念は関連があるものの別物である。また、基底クラスで定義されたフィールドやメソッドが派生クラスからもアクセス可能な場合は、それらを参照する際に、C++では基底クラス名を用いた修飾によりスコープを明示するが、JavaやC#ではsuperやbaseといったキーワードによるエイリアスを使う。
※この「名前空間からの分類」の解説は、「スコープ (プログラミング)」の解説の一部です。
「名前空間からの分類」を含む「スコープ (プログラミング)」の記事については、「スコープ (プログラミング)」の概要を参照ください。
- 名前空間からの分類のページへのリンク