Ruby

あれもこれも、Rubyではメソッド。

More than 1 year has passed since last update.

Rubyの世界では、普通の言語なら文法として実装してしまうものでも、メソッドになっていることがあります。

初級編

newメソッド

多くの言語でnewは演算子ですが、RubyではClassクラスのメソッドとなっています。Object.newのように書くので、これはメソッドだとわかりやすいと思います。

だからといって、自分でnewを再実装することはないと思いますが、private_class_method :newとすれば、newメソッドをprivateにして、外部からかんたんにnewできないようにできます。

中級編

attr_xxxメソッド

Rubyの場合、インスタンス変数を直接publicにすることはできないので、読み書きするだけのメソッドが必要になることがあります。それをかんたんに実装できるのがattr_readerattr_accessorなどのメソッド群です。Rubyではクラス定義内もコード実行が行われるので、「メソッド定義をするメソッド」をこの場で使えるのです(これはその気になれば自分で実装できます)。

public/private/protected

他の言語と動作が違うことで有名なRubyのアクセス制御ですが、実はこれらもメソッドです。とは言え、メソッドして意識しておくような場面も、private(*methods)のように引数をsplatするときぐらいだとは思います。

上級編

Kernelのメソッド群

Kernelというモジュールがあって、これはObjectincludeされています。ということで、ここに定義されたメソッドはレシーバー無しで使えます。ただ、リストを見てみれば「これもメソッドだったの?」と言うものが目白押しです。

  • block_given?…メソッドにブロックが与えられたか判定する
  • exit…Rubyを終了する
  • p/putc/puts…標準出力する
  • procProcを作成する
  • raise…例外を投げる
  • require…ライブラリを読み込む

「メソッドである」ことで注意しないといけないシチュエーションが2つあって、「同名のメソッドを定義したクラスの中」や、「Objectの上位にあるBasicObjectから継承したクラスの中」では、これらが(普通に呼ぶだけでは)使えません。例外を投げるのにも::Kernel.raiseとする必要があります。