1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

遅延初期化

Last updated at Posted at 2023-04-08

遅延初期化

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メソッドが初回しか呼ばれないので効率が良い。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?