【こんすとらくた】

コンストラクタ とは?

最終更新:
💡 オブジェクト誕生の「開店準備」

クラスのインスタンスを生成するときに使われる初期化の仕組み。引数から初期値を設定するなど、オブジェクトを使うための準備をまとめられる。名前や定義方法は言語によって異なる。

📌 このページのポイント
コンストラクタ:生成時の準備 JavaScriptの例 class User constructor 名前と年齢を 初期値へ設定 クラス(設計図) user1 name: 田中 age: 25 new user2 name: 鈴木 age: 30 new 引数を受け取り、それぞれの初期値を設定 名前や定義方法は言語によって異なる
JavaScriptのclassで2つのUserを生成する例。通常のnewによる生成でconstructorが実行されます。初期化に失敗すれば生成も失敗することがあります。
ひよこ ひよこ
コンストラクタって何?普通のメソッドと何が違うの?
ペンギン先生 ペンギン先生
お店の開店準備のように、クラスからインスタンスを作るときの初期設定を担当する仕組みだよ。Javaのコンストラクタは通常のメソッドとは別扱いで、JavaScriptのclassではconstructorという特別なメソッドとして定義するんだ。
ひよこ ひよこ
普通のメソッドも初期化できるんじゃないの?わざわざコンストラクタが必要な理由は?
ペンギン先生 ペンギン先生
普通の初期化メソッドは別に呼ぶ必要があるけど、コンストラクタなら通常のインスタンス生成の手順に組み込めるよ。ただ、必要な値を設定しなかったり処理が例外で失敗したりすれば、正しく使えるオブジェクトができる保証はないんだ。
ひよこ ひよこ
コンストラクタに引数って渡せるの?
ペンギン先生 ペンギン先生
渡せるよ。例えばJavaScriptならnew User("Ken", 30)で名前と年齢を渡し、constructor(name, age)で受け取って初期値を設定できるんだ。
ひよこ ひよこ
コンストラクタを定義しなかったらどうなるの?
ペンギン先生 ペンギン先生
言語によって違うよ。Javaの通常のクラスではコンストラクタを1つも宣言しないと引数なしのものが用意され、親の引数なしコンストラクタを呼ぶ。JavaScriptでも省略できるけど、派生クラスの既定のconstructorは受け取った引数を親へ渡すんだ。単に何もしないとは限らないね。
ひよこ ひよこ
コンストラクタが複数あることもあるって聞いたけど?
ペンギン先生 ペンギン先生
Javaでは引数の数や型を変えたオーバーロードができるよ。一方、JavaScriptのclassにはconstructorを1つだけ定義できる。継承時に親を呼ぶ方法や順序にも言語の規則があるので、使う言語の仕様に合わせるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンストラクタ」って出てきたら「オブジェクトが生まれた瞬間に自動で走る初期化の処理だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「constructor」 = 構築するもの・組み立てるもの
💬 constructは「建設する」という動詞。オブジェクトを建設するときの段取り係がコンストラクタだよ

参考資料

← 用語集にもどる