initializeメソッド
initialize
と言う名前が付けられたメソッドは特別なメソッドで、オブジェクトが新しく生成されるときに自動的に initialize メソッドが呼び出されます。
class Drink
def initialize #iniitializeメソッドを定義-----①
puts "新しいオブジェクト"
end
end
Drink.new #initializeメソッドが自動で呼ばれる-----②
#=> 新しいオブジェクト
①でinitialize
メソッドを定義します。②でnew
メソッドが呼ばれるとオブジェクトが作られますが、その際にinitialize
メソッドが自動で呼ばれます。
インスタンス変数の初期値を設定する
initializeメソッドが便利な場面の例として、「インスタンス変数の初期値を設定する」 があります。
class Drink
def initialize()
@name = "カフェラテ" # @newにを代入-----①
end
def name
@name
end
end
drink = Drink.new #classをnewメソッドを使ってインスタンス化----②
puts drink.new #nameメソッドを呼び出す----③
#=> カフェラテ
②でDrink.new
してオブジェクトが作られるときにinitialize
メソッドが呼ばれ、①でインスタンス変数@name
に"カフェラテ"が代入されます。③でname
メソッドを呼ぶと、戻り値は①で代入した"カフェラテ"になっています。
initializeメソッドに引数を渡す
先ほどのプログラムで、Drink
クラスのオブジェクトを作ると@name
には初期値として”カフェラテ”が代入されるようになりました。では、この初期値を”カフェラテ”以外にも自由に設定するためにはどうしたらいいでしょうか?これは、initialize
メソッドに引数を渡せるようにすることで解決できます。
initialize
メソッドに引数を受け取るように定義して、new
メソッドを呼び出す時にオブジェクトを渡すと、initialize
メソッドで引数として受け取ることができます。
class Drink
def initialize(name) #initializeメソッドに引数を受け取るように定義-----①
@name = name #引数で受け取ったオブジェクトを@nameに代入-----②
end
def name
@name
end
end
drink = Drink.new("モカ") #newメソッドに”モカ”を渡す-----③
puts drink.name #-----④
#=> モカ
①でinitialize
メソッドに引数を受け東洋に定義しています。③でnew
メソッドを呼び出し、”モカ”を渡しています。initialize
メソッドが呼ばれるときに、引数として変数name
に”モカ”が渡ってきます。②で引数で受け取ったオブジェクトを@name
へ代入します。④で@name
変数の中身を表示させると、③で渡した”モカ”になっています。
まとめ
- initializeメソッドで定義しておくとオブジェクトが作られるときに自動で呼び出されて実行される
- initialzieメソッドに引数を受け取るように定義しておくと、newメソッドを呼び出すときに引数を渡すことで、initializeメソッドで引数として受け取ることができる。
参考
[ゼロからわかるRuby超入門]
initializeメソッドの使い方