自分用のメモです。
initializeメソッドとは(一言で)
- コンストラクタのこと。
コンストラクタとは
- オブジェクトを生成した際に1度だけ実行される機能を指す名称。
- なお、オブジェクトが生成された際にのみ実行されることから、そのオブジェクト内で共通に使えるインスタンス変数の初期化などに使われる。
- ただしクラスを定義した際、コンストラクタを必ず作る必要はない。
- コンストラクタが定義されていなくてもオブジェクトを生成できる。
- また、Rubyではオブジェクトを生成するnewメソッドの引数を利用して、コンストラクタによる変数の初期化も可能。
initializeメソッドの特徴
- initializeメソッドを定義しておくと、インスタンス生成時に必ず実行したい処理をメソッドを呼び出すことなく実行することができる。
- 例えば次の例では、initializeメソッドの中でインスタンス変数の初期化を行っている。
class Car
def initialize()
@name = "未定義"
end
end
car = Car.new()
- こうすることで、Car.newでインスタンスを生成したあとでメソッドを呼び出す記述をしなくても自動的にメソッドを呼び出してくれるので便利。
- initializeメソッドを使わない場合は、このように書かないといけない。
class Car
def init()
@name = "未定義"
end
end
car = Car.new()
car.init()
引数を渡すこともできる
class Hello
# 名前を保持するクラス変数
@name = nil
# クラスの初期化メソッド
def initialize(name)
@name = name
end
# クラスのインスタンスメソッド
def talk
puts "hello, #{@name}"
end
end
# classのnewメソッドに引数を渡す
hello = Hello.new("asami")
# newメソッドからinitializeメソッドに渡って初期化された名前が使用される
hello.talk
この場合、initializeメソッドを呼びだす時(インスタンス生成時)に引数を指定して呼び出すことになるから、メソッドに値を渡すことができる。
そしてメソッドの中で、"asami" が @name に代入される。
最後にインスタンス変数であるhelloに対してtalkメソッドを実行しているので、以下が出力される。
出力結果
hello, asami