遅延初期化
Rubyではインスタンス変数を遅延初期化するときには、 ||= という演算子を使います。
遅延初期化の例
1 private def current_staff_member
2 if session[:staff_member_id]
3 @current_staff_member ||=
4 StaffMember.find_by(id: session[:staff_member_id])
5 end
6 end
解説
current_staff_memberメソッドが初めて呼ばれた時は、@current_staff_memberは空なので、
3行目の演算子の||右辺の4行目が呼ばれる
4 StaffMember.find_by(id: session[:staff_member_id])
2回目以降メソッドが呼ばれた時は、nilでもfalseでもない値がセットされているので、
||の右辺は評価されず左辺だけが評価される。
(この例の場合、@current_staff_memberの値だけ返される)
このように遅延初期化を使うと、staffMember.find_byメソッドが初回しか呼ばれないので効率が良い。