6-1-1 メソッドの構成と種類を学ぼう

メソッドの引数と戻り値

1-4 irbで対話的に動作させよう」でputsメソッドを通して、メソッドとはRubyの命令の1つであることを学びました。

Rubyではオブジェクトを操作するための命令として、メソッドが定義されています。

メソッドの基本的な構造は、以下の2つです。

  • メソッドの直後に決められた値が定められていること
  • メソッドの実行後に返す値が定められていること

前者の「直後に決められた値」を引数と呼び、後者の「実行後に返す値」を戻り値と呼びます。

これまでもputsメソッドなどで確認した通り、引数や戻り値がない場合もあります。戻り値が定義されていない場合はnilが返却されます。

引数を取らないメソッドの代表的な例に、オブジェクトがnilかどうかを戻り値として返すnil?メソッド、文字列の文字数を戻り値として返すsizeメソッドなどがあります。

irb(main):001:0> a = nil
=> nil
irb(main):002:0> a.nil?
=> true
irb(main):003:0> b = 'test'
=> "test"
irb(main):004:0> b.size
=> 4

メソッドの呼び出し方法

メソッドの呼び出し方法には、以下の3つがあります。

  • オブジェクトの直後にドット(.)を付与してメソッドを呼び出す
  • ブロックを引数に指定してメソッドを呼び出す
  • 演算子としてメソッドを呼び出す

「オブジェクトの直後にドット(.)を付与してメソッドを呼び出す」方法は、オブジェクト.メソッド(引数1, 引数2, ...)の形式です。たとえば、ハッシュのdeleteメソッドが該当します。

このオブジェクトのことをレシーバー(Receiver)と呼ぶこともあります。

オブジェクトは、メソッドで定義された何かしらの処理の受け手=レシーバーとなるからです。

「ブロックを引数に指定してメソッドを呼び出す」方法は、オブジェクト.メソッド { |変数| 処理 }の形式です。

たとえば、繰り返し処理のeachメソッドが該当します。

なお、ブロックの先頭に渡す変数のことをブロック変数と呼びます。

「演算子としてメソッドを呼び出す」方法は、オブジェクト 演算子(メソッド) 引数の形式です。たとえば、数値計算で用いた+が該当します。

これまで1 + 2などと計算するプログラムを確認しましたが、実はRubyでは+という演算子もメソッドとして定義されています。

この計算式の場合は、1がレシーバー、+がメソッド、2が引数と解釈することができます。