6-1-3 画面表示系メソッドの違いとメソッドの分類
p
メソッド、puts
メソッド、print
メソッドの違い
画面に表示するメソッドにはp
、puts
、print
があります。それぞれ微妙に違いがあります。
p
メソッドは、引数を表示して改行し、戻り値には表示した値が返ります。
puts
メソッドは、引数を表示して改行し、戻り値にはnil
が返ります。
print
メソッドは、改行なしで引数を表示し、戻り値にはnil
が返ります。
いずれのメソッドも引数を省略することができます。
まとめると以下の通りです。
メソッド | 動作 | 戻り値 |
---|---|---|
p |
引数を表示して改行 | 表示した値 |
puts |
引数を表示して改行 | nil |
print |
改行せず引数を表示 | nil |
メソッドの種類
メソッドは主に以下の3つに分類されます。
- オブジェクトから呼び出すメソッド
- オブジェクトの型(クラス)から直接呼び出すメソッド
- オブジェクトを指定しないで呼び出すメソッド
インスタンスメソッド
これまで学んできたメソッドのうち、「オブジェクトから呼び出すメソッド」の例は、ハッシュのstore
メソッドです。
ハッシュ.store(キー, 値)
のように使用します。戻り値には設定された値が返ります。
これは、ハッシュオブジェクトにstore
メソッドがあらかじめ備わっているので使用することができます。
このように、オブジェクト.メソッド名(引数1, 引数2, ...)
の形式で使用できるメソッドは、オブジェクトの型(クラス)によって様々なものがあります。
このようなメソッドのことをインスタンスメソッドと呼びます。
クラスメソッド
「オブジェクトの型(クラス)から直接呼び出すメソッド」の例は、ハッシュを定義するHash.new
です。
Rubyでは、先頭を大文字で定義したものはオブジェクトの型であるクラスを表します。
Hash.new
とすることで、新しいハッシュクラスのオブジェクトを定義することができます。
なお、h = Hash.new
はh = {}
と省略して書き換えられます。この場合、レシーバーがHash
クラス、メソッドがnew
です。
レシーバーがオブジェクトではなく、クラスであることに違いがあります。
このようなメソッドのことをクラスメソッドと呼びます。
関数型メソッド
「オブジェクトを指定しないでそのまま使えるメソッド」の代表例は、画面に表示するputs
メソッドです。
インスタンスメソッドやクラスメソッドは、オブジェクトまたはクラスにドット(.
)でメソッドを繋げて利用します。
一方、puts
メソッドのように、オブジェクトやクラスを指定しないでそのまま使えるメソッドもあります。
実はRubyでは全ての命令はメソッドとして実装されているので、オブジェクトを指定しないでそのまま使えるメソッドはオブジェクトの指定であるオブジェクト.
の部分を省略して使えるようにRubyが制御してくれています。
このようなメソッドのことを関数型メソッドと呼びます。
メソッドの分類まとめ
メソッドの分類をまとめると以下の通りです。
分類 | 定義 |
---|---|
インスタンスメソッド | オブジェクトから呼び出すメソッド |
クラスメソッド | オブジェクトの型(=クラス)から直接呼び出すメソッド |
関数型メソッド | オブジェクトを指定しないで呼び出すメソッド |