要旨
ブロックを使うのがおすすめ。
詳細
Hash#fetch
は、Hash
に指定したKeyが存在する際に、そのValueを返すメソッドである。
このメソッドは、指定したKeyが存在しなかった際、デフォルト値を返すことができる。その際、デフォルト値の与え方は下記の2通りある。
fetch(key, default_value)
fetch(key) { |key| default_value }
結論を先に言うと、2つ目のブロックを与える方がパフォーマンスが良くなる傾向があると言える。
1つ目は、fetch
メソッドに値が渡る際、第2引数のdefault_value
が評価された後で渡る。したがって、Hash
内にkeyが存在していた場合、default_value
の計算に要したリソースは全て無駄になる。
一方、2つ目はkeyがHash
内に存在していなかった場合になって初めて評価される。なので、重たい処理がdefault_value
に相当する場合、ブロックで渡すことが推奨される。
なお、keyがHash
に存在していなかった場合、どちらもdefault_value
が必要になるため、必要な計算リソースは変わらず、ほぼ変わらないパフォーマンスになると思われる。