🚴
【Ruby】||=や&&= の意味とユースケース
プロダクトのコードを読んでいるとたまに見かける||=や&&=について、
久しぶりに見るとなんだっけ?と忘れてしまうのでまとめた。
||= や &&= の意味
自己代入と呼ばれる演算式。
リファレンスはこちら。
+=とか*=と同じ位置付けなのかな?
# 以下は同義
a ||= b
a || a = b
# aがtrue、もしくは値が定義されていれば、aを返す。
# aがfalse、もしくはnilであれば、aにbを代入する。
# 同義2
a &&= b
a && a = b
# aがtrue、もしくは値が定義されていれば、aにbを代入する。
# aがfalse、もしくはnilであれば、aの値を返す。
用途
意味は分かったけど、どういうケースで使うの?の具体例を記す。
||=は、変数に値が入っていないときだけ、DBから値を取ってきて代入したい時に使えそうだな〜、
というイメージは湧く。こちらの超ありがたい伊藤様の記事でユースケースがまとめられている。
ただ、&&=は全然イメージが湧かなかったので調べてみた。
こちらの記事でユースケースが紹介されていた。
タイトルを英語にすると and and && and &&= という訳のわからないことになります。日本語って便利ですね。
良い導入文。好きです。笑
で、どう使うかというとこんな感じ。
def test
succes = true
success &&= method_a(arg[:a]) if params[:a]
success &&= method_b(arg[:b]) if params[:b]
success
end
# 書き直すと(読みにくくなってる気もするけど)
def test
success = true
success && success = method_a(params[:a]) if params[:a] #(1)
success && success = method_b(params[:b]) if params[:b] #(2)
success
end
params[:a]に値が入っていればmethod_aを実行する。
method_aの結果がtrueならmethod_bは実行せず、testメソッドはfalseを返す。
method_aがtrueなら、(2)の処理に進み、
params[:b]に値が入っていればmethod_bを実行する。
methodの結果をtestメソッドの返り値として返す。
ぱっと見、successっていう変数を使う意味ある?って思ったけど
良い感じ仲介役してくれてる。
そういえばプロダクトのコードで見かけたことがあるかも。
覚えておきたい。
Discussion