概要

Wikipedia の記事 external_linkでは

コンストラクタ(英: constructor)は、オブジェクト指向のプログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数あるいはメソッドのことである。対義語はデストラクタ。

と説明されています。Construct-or なので直訳すると「構築するもの」あたりが妥当でしょうか。

そう言われてもよく分からないんだけど?

だと思います。ですので理解しやすく説明していきます。

引用元:シリコーンゴム - Wikipedia external_link

こういうカヌレの焼き型や、粘土の型をイメージしてください。これがコンストラクタです

ますます混乱してきた

ではここから、この記事を読んできて頭の中に発生したふわっとしたイメージに目鼻をつけます。

「これからオブジェクトを定義するので、きみの手元にあるそのもわもわしたもの(これからオブジェクトになるデータの概念とでも思ってください)をこの雌型に押し込んでクラスを成してね」というものがコンストラクタです。

この「雌型」と「もわもわしたもの」のある限り、オブジェクトをいくらでも生成していくことが可能です。

別にそんなものなくてもいいじゃないですか

はい、では想像してください。あなたは神様になりました。正確には「ゲームの世界を創造した神様」ですが、それは置いておいてとりあえずあなたは神様です。

神はまた言われた、「われわれのかたちに、われわれにかたどって人を造り、これに海の魚と、空の鳥と、家畜と、地のすべての獣と、地のすべての這うものとを治めさせよう」

という訳で新しいクラス「人」を定義して、先ほどの「もわもわしたもの」を使ってガンガン人を作っていきましょう。

できましたか?ではここでイメージを一旦停止してガンガン作っていった人を見てみましょう。同じ大きさ同じ顔、性別も含めて全く差のないクローンが蠢いています。

進捗の確認に上司が来ました。上司はこれをご覧になり「これじゃつまんないじゃないか」と仰いました。やり直しです。

じゃぁ個性を持たせてみよう

一旦大洪水を起こして世界をリセットし、ふたたび「人」クラスを生成していきます。New() などのメソッドでオブジェクトを生成したら、オブジェクトの持つプロパティの値をちまちまと設定していきます。

 ちまちまちまちまちまちまちまちまちまちまちまちまちまちまちまちま……

気が狂いそうです。おまけに時間がかかりすぎるのでこのままでは残業です。

引数を渡すことができたら

もしコンストラクタに引数を渡せたらどうでしょうか。性別や年齢、残りの寿命などといったプロパティを引数としてコンストラクタに渡して「人」クラスを生成することで、個性を持ったものを少ない作業量で生み出すことができますね?

おっと先ほどダメ出ししてきた上司が来ました。上司が「まぁよかろう」と仰ったので今日は残業なしで帰宅できます。

まとめ

コンストラクタは

  • 定義に則ってオブジェクトを成すことができる雌型である
  • 引数を渡してプロパティを設定することで個性を持たせることができる
  • 個性を持ったオブジェクトを生成するときの作業量を削減できる

というメソッドです。