6-1-3 画面表示系メソッドの違いとメソッドの分類

pメソッド、putsメソッド、printメソッドの違い

画面に表示するメソッドにはpputsprintがあります。それぞれ微妙に違いがあります。

pメソッドは、引数を表示して改行し、戻り値には表示した値が返ります。

putsメソッドは、引数を表示して改行し、戻り値にはnilが返ります。

printメソッドは、改行なしで引数を表示し、戻り値にはnilが返ります。

いずれのメソッドも引数を省略することができます。

まとめると以下の通りです。

メソッド 動作 戻り値
p 引数を表示して改行 表示した値
puts 引数を表示して改行 nil
print 改行せず引数を表示 nil

メソッドの種類

メソッドは主に以下の3つに分類されます。

  • オブジェクトから呼び出すメソッド
  • オブジェクトの型(クラス)から直接呼び出すメソッド
  • オブジェクトを指定しないで呼び出すメソッド

インスタンスメソッド

これまで学んできたメソッドのうち、「オブジェクトから呼び出すメソッド」の例は、ハッシュのstoreメソッドです。

ハッシュ.store(キー, 値)のように使用します。戻り値には設定された値が返ります。

これは、ハッシュオブジェクトにstoreメソッドがあらかじめ備わっているので使用することができます。

このように、オブジェクト.メソッド名(引数1, 引数2, ...)の形式で使用できるメソッドは、オブジェクトの型(クラス)によって様々なものがあります。

このようなメソッドのことをインスタンスメソッドと呼びます。

クラスメソッド

「オブジェクトの型(クラス)から直接呼び出すメソッド」の例は、ハッシュを定義するHash.newです。

Rubyでは、先頭を大文字で定義したものはオブジェクトの型であるクラスを表します。

Hash.newとすることで、新しいハッシュクラスのオブジェクトを定義することができます。

なお、h = Hash.newh = {}と省略して書き換えられます。この場合、レシーバーがHashクラス、メソッドがnewです。

レシーバーがオブジェクトではなく、クラスであることに違いがあります。
このようなメソッドのことをクラスメソッドと呼びます。

関数型メソッド

「オブジェクトを指定しないでそのまま使えるメソッド」の代表例は、画面に表示するputsメソッドです。

インスタンスメソッドやクラスメソッドは、オブジェクトまたはクラスにドット(.)でメソッドを繋げて利用します。

一方、putsメソッドのように、オブジェクトやクラスを指定しないでそのまま使えるメソッドもあります。

実はRubyでは全ての命令はメソッドとして実装されているので、オブジェクトを指定しないでそのまま使えるメソッドはオブジェクトの指定であるオブジェクト.の部分を省略して使えるようにRubyが制御してくれています。

このようなメソッドのことを関数型メソッドと呼びます。

メソッドの分類まとめ

メソッドの分類をまとめると以下の通りです。

分類 定義
インスタンスメソッド オブジェクトから呼び出すメソッド
クラスメソッド オブジェクトの型(=クラス)から直接呼び出すメソッド
関数型メソッド オブジェクトを指定しないで呼び出すメソッド