Rubyの世界では、普通の言語なら文法として実装してしまうものでも、メソッドになっていることがあります。
初級編
new
メソッド
多くの言語でnew
は演算子ですが、RubyではClass
クラスのメソッドとなっています。Object.new
のように書くので、これはメソッドだとわかりやすいと思います。
だからといって、自分でnew
を再実装することはないと思いますが、private_class_method :new
とすれば、new
メソッドをprivate
にして、外部からかんたんにnew
できないようにできます。
中級編
attr_xxx
メソッド
Rubyの場合、インスタンス変数を直接public
にすることはできないので、読み書きするだけのメソッドが必要になることがあります。それをかんたんに実装できるのがattr_reader
やattr_accessor
などのメソッド群です。Rubyではクラス定義内もコード実行が行われるので、「メソッド定義をするメソッド」をこの場で使えるのです(これはその気になれば自分で実装できます)。
public
/private
/protected
他の言語と動作が違うことで有名なRubyのアクセス制御ですが、実はこれらもメソッドです。とは言え、メソッドして意識しておくような場面も、private(*methods)
のように引数をsplatするときぐらいだとは思います。
上級編
Kernel
のメソッド群
Kernel
というモジュールがあって、これはObject
にinclude
されています。ということで、ここに定義されたメソッドはレシーバー無しで使えます。ただ、リストを見てみれば「これもメソッドだったの?」と言うものが目白押しです。
-
block_given?
…メソッドにブロックが与えられたか判定する -
exit
…Rubyを終了する -
p
/putc
/puts
…標準出力する -
proc
…Proc
を作成する -
raise
…例外を投げる -
require
…ライブラリを読み込む
「メソッドである」ことで注意しないといけないシチュエーションが2つあって、「同名のメソッドを定義したクラスの中」や、「Object
の上位にあるBasicObject
から継承したクラスの中」では、これらが(普通に呼ぶだけでは)使えません。例外を投げるのにも::Kernel.raise
とする必要があります。