リファレンスのinitializeメソッド解説を見ても一回で理解できなかったので、ここにまとめておきます。
ユーザ定義クラスのオブジェクト初期化メソッド。
このメソッドは Class#new から新しく生成されたオブ ジェクトの初期化のために呼び出されます。他の言語のコンストラクタに相当します。 デフォルトの動作ではなにもしません。
initialize には Class#new に与えられた引数がそのまま渡されます。
サブクラスではこのメソッドを必要に応じて再定義されること が期待されています。
initialize という名前のメソッドは自動的に private に設定されます。
例えば、ゲームのキャラクターを作るときHPが100でなきゃいけない場合を考えます。キャラクターを新たに作るときにHPが0だったらすぐにゲームオーバーで話にならないですよね。そんなことにならないようにあらかじめHPを決めておきます。
これをinitializeを使って表現しますと
class Monster
# はじめのHPは100
def initialize(hp=100)
@hp = hp
end
def hp
puts(@hp)
end
end
pikachu = Monster.new
pikachu.hp #=> 100
もちろんinitializeを使わなくてもできます。
class Monster
def hp=(hp)
@hp = hp
end
def hp
puts(@hp)
end
end
pikachu = Monster.new
pikachu.hp = 100
pikachu.hp #=> 100
この形でも問題ありませんが、チームでこのゲームを作っている場合、大本のMonsterを作っている人と個別のモンスターのpikachuやゼニガメを作っている人の間でミスが起こる場合があります。
ゼニガメのHPは200だと思い込んでたとか。それに何より初めからHPの値が決まっているならinitializeを使った方がいいに決まってます。
initializeメソッドはclassの中に入れておけば、newメソッドが実行される時に自動で動くので便利。