Hash#fetchの使いどころ

引数の順序に対する依存を取り除くため、初期化の際に引数にハッシュを渡す

このときにもしハッシュのキーが存在しなければデフォルト値を設定するために || [デフォルト値] のような書き方をしている

※ 以下のコードはオブジェクト指向設計実践ガイドから引用

def initialize(args)
  @chainring = args[:chainring] || 40
  @cog = args[:cog] || 18
  @wheel = args[:wheel]
end
この書き方でも良いのだが、bool値を設定したいときに呼び出し側でfalseを設定する場合に   は左辺がfalseかnilだと右辺を評価するのでtrueになってしまう問題が起きる
# args[:piyo]がfalseだと右辺が評価されてtrueが入る
args = {piyo: false}
piyo = args[:piyo] || true
# => true

そこでこの問題を解決するためにfetchメソッドを使う

Hash#fetch (Ruby 3.2 リファレンスマニュアル)

こうすれば呼び出し側でfalseを設定する場合にも対応できる

args = {piyo: false}
piyo = args.fetch(:piyo, true)
# => false