Ruby リファレンスマニュアルの読み方2(返り値)

Ruby リファレンスマニュアルの読み方1(メソッド) の続き。返り値について詳しく見ていく。

docs.ruby-lang.org

size -> Integer の「-> Integer」って何?
size メソッドは整数を返すという意味です。
このマニュアルのヘルプ (Ruby 2.7.0 リファレンスマニュアル)

リファレンスでは、下のように メソッド名 -> 返り値の型 の形で書かれている。これは具体的にどういう意味か。

f:id:masuyama13:20200909215125p:plain

返り値の型

返り値の型には以下のようなものがある。

  • bool
  • Array
  • object など

「bool」は真偽値

例)Integer#even?

even? -> bool

even?は、整数オブジェクトが偶数であればtrue、偶数でなければfalseを返すメソッド。

irb で返り値を確認してみる。

irb(main):001:0> 10.even?
=> true
irb(main):002:0> 5.even?
=> false

このように、truefalse が返ってくるものは、-> bool と表記される。

Integer#even? (Ruby 2.7.0 リファレンスマニュアル)

「Array」か「[クラス名]」は配列

例1)Array#shuffle

shuffle -> Array
shuffle(random: Random) -> Array

shuffleは、配列の要素をシャッフルして、シャッフル後の配列を返すメソッド。

irb で返り値を確認してみる。

irb(main):001:0> ["apple", "banana", "cherry"].shuffle
=> ["apple", "cherry", "banana"]
irb(main):002:0> [1, 2, 3].shuffle
=> [3, 1, 2]

このように、配列(Array)が返ってくるものは、-> Array と表記される。

Array#shuffle (Ruby 2.7.0 リファレンスマニュアル)

例2)String#chars

chars -> [String]
chars {|cstr| block } -> self

charsは、文字列の各文字を配列にして返すメソッド。

irb で返り値を確認してみる。

irb(main):001:0> "apple".chars
=> ["a", "p", "p", "l", "e"]

このように、要素が文字列(String)の配列(Array)が返ってくるものは、-> [String] と表記される。配列[]の中身の型が String ということ。

String#chars (Ruby 2.7.0 リファレンスマニュアル)

例3)Integer#digits

配列の中身の型が整数(Integer)であれば、-> [Integer]という表記になる。

digits -> [Integer]
digits(base) -> [Integer]
irb(main):001:0> 16.digits
=> [6, 1]

Integer#digits (Ruby 2.7.0 リファレンスマニュアル)

「object」は任意の型

例)Array#delete

delete(val) -> object | nil
delete(val) { ... } -> object

deleteは、引数と等しい要素を配列から削除し、削除した値を返すメソッド。

irb で返り値を確認してみる。

irb(main):001:0> ["apple", "banana", "cherry"].delete("banana")
=> "banana"
irb(main):002:0> [1, 2, 3].delete(2)
=> 2

削除した要素が文字列(上の例では"banana")だと文字列、整数(上の例では2)だと整数オブジェクトが返ってくることがわかる。

このように、レシーバによって返り値の型が変わるものは、-> object と表記される。

Array#delete (Ruby 2.7.0 リファレンスマニュアル)

複数の型があるとき

複数の型の値を返すときは "|" を使って記述されています。
このマニュアルのヘルプ (Ruby 2.7.0 リファレンスマニュアル)

例)Array#delete

delete(val) -> object | nil
delete(val) { ... } -> object

すでに紹介したdeletedelete(val) -> object | nilと書いてある。|は "or" のような意味っぽい。

deleteは引数と等しい要素を配列から削除し削除した値を返すメソッドだが、見つからなかった場合はnilを返す。

irb(main):001:0> ["apple", "banana", "cherry"].delete("grape")
=> nil

その他

「-> ()」は不定

いい例が見つからなかったので見つかったら追記する。

代入式の場合は省略

ヘルプによると、代入式の場合は省略されるらしい。いい例があったら追記する。