コンストラクタ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
コンストラクタ(構築子、Constructor)は、オブジェクト指向のプログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数、メソッドのことである。対義語はデストラクタ。
オブジェクトの生成は、
- メモリ割当 (allocation)
- 初期化 (initialization)
の二段階を経て行われるが、コンストラクタを持つ言語ではアロケーションは言語機能に組み込まれ、初期化用のコードのみを記述するのが普通である。
クラスベース言語でのコンストラクタ [編集]
Java、C++、PHPなど、クラスベースのオブジェクト指向言語では、コンストラクタはクラスのメンバとして定義される。
Java, C++ではコンストラクタを「クラス名と同一の名前を持つ関数(メソッド)」と定義しており、次のような自然な記法を行なえるようになっている。
class SomeClass{
SomeClass(//引数リスト){
//初期化用のコード
}
}
SomeClass obj = new SomeClass(//引数リスト);
この時コンストラクタに渡す引数により初期化のバリエーションが定義される。特にパターンとして名前をもつコンストラクタは以下である。
- デフォルトコンストラクタ
- 引数なしのコンストラクタでオブジェクトを生成するときは、そのフィールドはデフォルト値で初期化される。例: Pointクラスが座標(0,0)で初期化される。引数有りコンストラクタを定義する場合は、引数無しコンストラクタも記述しておく必要がある。
- コピーコンストラクタ
- 同一クラスのオブジェクトから複製を作る。
- コンストラクタチェーン
- 引数の異なる複数のコンストラクタをチェーンのように一つのコンストラクタへ結び付けること。単純なものから複雑なものへ流すことで初期化コードの重複を防ぐ。
JavaScriptのコンストラクタ [編集]
JavaScriptはプロトタイプベースのオブジェクト指向言語であるため、クラスは存在せず、new付きで通常の関数を呼び出すことで、コンストラクタとして動作させることができる[1]。関数をコンストラクタとして呼び出すと、thisは新しく生成されるオブジェクトを指すようになり[1]、またプロトタイプも設定される[2]。
脚注 [編集]
- ^ a b 山田祥寛 (2007年9月25日). “連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page1”. @IT. 2011年12月13日閲覧。
- ^ 山田祥寛 (2007年9月25日). “連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page2”. @IT. 2011年12月13日閲覧。