こんにちは!tekute-kuです。
今回はオブジェクト指向型の言語では基本となるコンストラクタについてまとめていきたいと思います。
この記事を書いた目的
コンストラクタはプログラミングを学び始めて日が浅かった時にはよく理解できませんでした。なので改めてアウトプットすることで理解し知識を定着させたいと思います。この記事が誰かの役に立てば幸いです。
コンストラクタとは
コンストラクタとはRubyのようなオブジェクト指向のプログラミング言語で使われる機能の1つでオブジェクトを生成した際に一度だけ実行される機能を指す名称のことです。
コンストラクタ(constructor)の元々の意味
コンストラクタは英語のconstructorが元になったIT用語です。意味は「製造者、建設者」。日本では総合建築企業のことを一般的にゼネコンと言いますが、ゼネコンはGeneral Contructor(ゼネラル・コントラクター)の略です。ここでのcontractor(コントラクター)は建設工事分野の請負者を指しますのでconstructor(コンストラクタ)とは全く関係ありません。
しかしconstructor(コンストラクタ)の動詞形のcontract(コントラクト)には「契約を結ぶ、契約する」という意味がありますので、「オブジェクトを生成した際の契約手続きとして実行する機能」がconstructor(コンストラクタ)であると理解しておけば分かりやすいかもしれません。
コンストラクタが実行されるタイミング
コンストラクタが実行されるタイミングは先ほども出てきましたがオブジェクトを新しく生成したときです。
つまりnewメソッドによりインスタンスが作られると同時に実行されます。
なおコンストラクタはinitializeメソッドに記述されており、それが実行できるのはインスタンスが生成された1度きりになります。
なので後からinitializeメソッドを実行することはできません。
つまりRubyのコンストラクタとして実行されるのがinitializeメソッドです。
実行コンストラクタの役割
コンストラクタとは何なのかということ、そして実行されるタイミングが分かりました。しかしコンストラクタはどのような役割を担っているのでしょうか。
インスタンス変数を初期化する
初期化と聞くと、設定をリセットするというようなことを想像してしまいますが、この場合の初期化とは、使える状態にするということです。
Rubyではインスタンスを生成するnewメソッドで引数を指定することで、その値をインスタンス変数に設定することが可能です。
class Animal #Animalクラス
def initialize(name) #引数にnameを設定
@name = name #インスタンス変数に代入
end
def view_name()
p @name
end
end
animal = Animal.new("lion")
animal.view_name()
=> "lion" #実行結果
上の例ではAnimalクラスにinitializeメソッドを定義し、newメソッドによりAnimalクラスのインスタンスが生成されたら引数の”lion”がインスタンス変数に代入されるようにしたものです。
これによりインスタンスが生成されると同時にインスタンス変数に代入されてインスタンス変数が使用できるように初期化されます。
まとめ
- コンストラクタはオブジェクト指向型のプログラミング言語で使用される機能でインスタンスが生成されるのと同時に実行される
- 実行されるのは一度きり
- Rubyではinitializeメソッドに記述されている
- 役割はインスタンス変数を初期化する
コメント