#代入演算子
代入演算子
とは、変数に対して何か値を代入する為の演算子です。
以下記事にわかりやすく解説してあるので、わからない方は読んでみてください。
代入演算子
には以下のようなさまざまな種類が存在します。
記号 | 意味 |
---|---|
= | 代入 |
+= | 加算して代入 |
-= | 減算して代入 |
*= | 乗算して代入 |
/= | 除算して代入 |
%= | 乗余して代入 |
**= | 累乗して代入 |
#「||=」(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