/constructorとは?今日こそクラスのconstructorを理解する!!2022.01.10constructorとは?今日こそクラスのconstructorを理解する!!Tweetこんにちは!りょた(@Ryo54388667)といいます(^o^)クラスのconstructorを直感的に理解できるように説明していきます。クラスを勉強したけど、意味がわからない。constructorの意味がわからない。constructorをイメージでとらえたい。クラスのconstructorの理解の助けになれば嬉しいです。クラスをイメージでとらえよう!クラスを初めて学習したときは、おそらくモノに例えてイメージしたのではないのでしょうか。この記事のなかでも、クラスをイメージでとらえていきます。今回は、自動車で例えていきます。一言で言えばクラスとは何かモノをつくるときの「設計書」のようなものです。プログラム上のクラスと現実世界の設計書の関係はこのようなものです。クラスには設計書に無い「constructor」という部分があります。「これは何ですか・・・?」そう思った人も多いのではないのでしょうか。この部分がなかなか理解しがたいと思います。僕も完全に理解したわけではありませんが、僕の知識の限り理解の助けになるかもしれない要素を次のセクションで書いていきます。constructorは特別な関数のようなもの試しにconstructorについてググってみます。このような説明が書かれていました。classで作成されたオブジェクトの生成と初期化のための特殊なメソッドです。https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes/constructorこれで理解できた人はこの記事を見なくて大丈夫です^^;)僕はこの説明の意味が全然わかりませんでした。「イメージができないんだよ。」そう思われた人も多いと思います。詳しく説明していきます。constructorの役割のひとつとして、設計書をもとにモノを作った際に得られる情報が初めにわたってくるところです。イメージとしてはこのような感じです。クラス名の部分がconstructorに変わっているような感じで読み替えるとわかりやすいと思います。フィールド変数の要素で宣言したものとは異なる「始めに情報がわたる部分ということはわかった。constructorの上の部分にかかれていることと同じものが書かれているやん。」ここがややこしいポイントですね!結論としては、1と2は異なるものを表しています。「じゃあなんで同じような名前にしているの?まぎらわしい。」そう感じる人もいるのではないかと思います。じつは、constructorの処理が終わったあとは、ほとんど同じようなものとして扱うようになります。なる以上、「どうせ同じものになるのだから、わかりやすく同じような名前でいいよね。」という慣習があり、こんなふうに書きます。この部分が親切なのか、逆に複雑にしているのか意見のわかれる部分だと思います。設計書の上部にかかれている情報とモノを作ったときに得られる情報は異なるものだというふうに理解してください。「同じものじゃないのはわかったけど、結局constructorは何をしているんだ。」そう思うのも無理はありません。2でも言いましたが、最終的には設計書の上部にかかれている情報とモノを作ったときに得られる情報を同じものとして扱うようになります。その作業をconstructorで行っています。ようは、「同じものとして扱えるようにする」というのがconstructorの役割です!これがいわゆる初期化という作業です。イメージは下のようなものです。クラス名(Car)の代わりにconstructorが作動し、引数を渡します。引数「プリウス」は右辺のnameに渡り、左辺のthis.nameに格納されます。コンピュータ側からみると、クラスの上部の情報と、モノが作られたときに得られる情報との関係がわかっていません。既存の箱に入れてあげることで、それらの関係が同じものだよと、紐付けてあげるのがconstructorの役割です。「=」のプログラム上の意味は、代入を表すのですが、このconstructorに関しては日本語の等号として理解するほうが、スッキリするかもしれません。最後にここまでまとめると、constructorというのは、設計書をもとにモノが作られたときの情報が始めにやってきて、それらと、設計書の上部に書かれた情報との関係が同じモノだよ、と紐付けてあげてあげるもの。