- 一度呼び出されてから結果が変わらないものはメモ化してしまう
- 呼び出されるたびにロジックやSQLが実行されるのを防ぐため、実行結果を丸々キャッシュする
sample1.rb
def target_member
@member ||= Member.find(rand(10))
end
p target_member # <Member id: 5, name: "Five">
p target_member # <Member id: 5, name: "Five">
sample2.rb
def invoice?
@invoice ||= pay_date >= Time.new(2023, 10, 1)
end
||=
により
- nil またはfalseであれば、右辺を代入する
- nil またはfalse以外であれば、2回目以降の呼び出し時は変数に格納された値を実行する
メモ化によって再実行を避けることが出来る為、特にコストの高い計算 や、データベースアクセス といった場合においてパフォーマンスの向上が期待できる。