ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

Rubyのnewとinitialize

そういえば、Rubyってnewで新しいオブジェクトを作るのに、コンストラクタはinitializeなのはなんか統一感ないなと思っていたんですよね。
そこで、例によってドキュメントを見ると、

Objectクラスのインスタンスを生成して返します。
singleton method Object.new

このメソッドは Class#new から新しく生成されたオブ ジェクトの初期化のために呼び出されます。他の言語のコンストラクタに相当します。 デフォルトの動作ではなにもしません。

initialize には Class#new に与えられた引数がそのまま渡されます。

サブクラスではこのメソッドを必要に応じて再定義されること が期待されています。

initialize という名前のメソッドは自動的に private に設定され ます。
instance method Object#initialize

どうやらもこうやらも、別のメソッドだったのならしかたない。しかしなぜあえて分けたのだろうか…ここから読み取れることは、つまり…

  • newメソッドはメモリの確保などをしてインスタンスを「新しく」生成するメソッド
  • initializeはインスタンスの「初期化をする」メソッド

と、何らかの思想のもとに分けた、ということになります。本元のドキュメントを参照したとはいえ、ソースを見てないので分かるのはこの程度の上っ面だけです。ソースが読みたくなってきたけどこういうのはどこにいったら見れるんだろう…