LoginSignup
3
2

More than 3 years have passed since last update.

【Ruby on Rails】「||=」←この代入演算子の使い方まとめ

Last updated at Posted at 2021-01-07

代入演算子

代入演算子とは、変数に対して何か値を代入する為の演算子です。
以下記事にわかりやすく解説してあるので、わからない方は読んでみてください。

代入演算子には以下のようなさまざまな種類が存在します。

記号 意味
= 代入
+= 加算して代入
-= 減算して代入
*= 乗算して代入
/= 除算して代入
%= 乗余して代入
**= 累乗して代入

「||=」(or equal)の代入演算子

代入演算子の中に、「||=」このような代入演算子も存在します。

「=」と「||」が合体した演算子です。

「=」は代入を意味します。上でも記載したが代入演算子の一種です。

a = b
a に b を代入します。

続いて、「||」はどちらかの条件が成立すれば、trueを返すという演算子です。(ORを意味します。)
これは、論理演算子と呼ばれています。
if文と一緒に使うと以下のようになります。

if a || b #a または b がtrueでtrueであればtrueを返す。
 #a か b がtrueの場合
else
 #両方falseの場合
end

この2つの演算子が合体するとどのような挙動になるのか。

a ||= b
a がfalseもしくは未定義ならbを代入します。
また a = (a || b) と同じ意味に当たります。

というような挙動になります。
実際の例文を以下に記載します。

  def current_user
    @current_user ||= User.find_by(id: session[:user_id])
  end

変数@current_userが存在する場合、もともと存在する@current_userを返します。

変数@current_userが存在しない場合、User.find_by(id: session[:user_id])でユーザーを見つけ、そのまま@current_userという変数に代入します。

上記コードは、以下のように書き換えることも可能です。

  def current_user
    @current_user = @current_user || User.find_by(id: session[:user_id])
  end

参考文献

Rails tutorial 第8章
https://railstutorial.jp/chapters/log_in_log_out?version=4.2#cha-log_in_log_out

3
2
2

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
3
2