Help us understand the problem. What is going on with this article?

あれもこれも、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とする必要があります。

jkr_2255
qiitadon
Qiitadon(β)から生まれた Qiita ユーザー・コミュニティです。
https://qiitadon.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした