🙌

【Ruby 3.4 Advent Calender】Array#fetch_values が追加された【15日目】

に公開

Ruby 3.4 Advent Calender 15日目の記事です。

これはなに

今年 2024年12月25日にリリースされる予定の Ruby 3.4 の新機能や変更点などを1つずつ紹介していく Advent Calender になります。
基本的には NEWS に載っている機能を紹介すると思うんですがここにない機能についても書くかもしれません。
また、記事を書いてる時点ではまだ Ruby 3.4 はリリースされる前なので Ruby 3.4 がリリースされた時点で機能が変わっている 可能性があるかもしれないので注意してください。
記事のまとめは ここを参照 してください。

Array#fetch_values が追加

Ruby 3.4 からは Array#fetch_values メソッドが追加されます。
Array#fetch_values は配列の複数の位置から複数の要素を取得するメソッドになります。

ary = %w(homu mami mado)

# 0番目と2番目の要素を取得する
pp ary.fetch_values(0, 2)
# => ["homu", "mado"]

# 1番目の要素を取得する
pp ary.fetch_values(1)
# => ["mami"]

また、範囲外の位置を渡すと IndexError が発生します。

ary = %w(homu mami mado)

# error: 'Array#fetch': index 5 outside of array bounds: -3...3 (IndexError)
pp ary.fetch_values(0, 5)

似たようなメソッドとして既存で Array#values_at があるんですがこちらは範囲外でもエラーにはならない違いがあります。

ary = %w(homu mami mado)

# こっちはエラーではなくて nil を返す
pp ary.values_at(0, 5)
# => ["homu", nil]

また、Hash でも同名のメソッドが定義されており、こちらも同じような挙動になります。

hash = { a: 1, b: 2, c: 3 }

pp hash.fetch_values(:a, :c)
# => [1, 3]

# キーがないと例外になる
# error: 'Hash#fetch_values': key not found: :d (KeyError)
pp hash.fetch_values(:d)

関連

GitHubで編集を提案

Discussion