a ||= 10
って何だ!? についてまとめた。
結論を先に
a ||= 10
は変数aが存在しない(又はnilやfalse)なら、右辺の変数aに10を代入する
だ!!!
#おさらい
うん。
まずは || についておさらい
|| は、条件式でよく使う
条件式の or として利用されるパターン。
if false || num == 1
ここで以下のコードを見て欲しい。
num = 1
p false || num == 1
表示はtrueとなる。
そりゃそうだろう。って感じだと思うけど、、、これを元に||
を考えてみよう!!
##細かく分析してみる
|| についてちゃんと調べると、こいつは「左辺を評価してfalseだから、右辺を評価した」という動作をしている!!
上のコードでは条件式の結果は、最終的にnum == 1
ここを見ている。
↑ ここ重要
つまり!
if の条件式だけで || を使ってると、
|| はtrueかfalseしか返さないのかな?って勘違いしやすい。
でも実は、違う!
実際はリファレンスに書いてる通り!
#Rubyのリファレンスを確認!
Rubyのリファレンスより
『左辺を評価し、結果が真であった場合にはその値を返します。 左辺の評価結果が偽であった場合には右辺を評価し その評価結果を返します。 or は同じ働きをする優先順位の低い演算子です。』
リファレンスのリンク
これが大事!
例えば、
num = 1
p false || num
を実行すると・・・
「1」が表示されるんだ!
もちろん、下も同じ結果になる
p false || 1
#改めて a ||= 10
を考える
よし! 改めて a ||= 10
を考えよう!
これは a = a || 10
を自己代入演算子で書いた式だね
###自己代入演算子が何かと言うと・・・
a (演算子)= b
は a = a (演算子) b
と同じ意味
例)
a += b
は a = a + b
a **= b
は a = a ** b
ここまで来ると理解できそう
|| というのは、まず左辺を評価してtrueならその値を返し、falseなら右辺を評価するから・・・
変数aがtrueなら
→ aを返す
変数aがfalseなら
→ 10を評価する(ここで、trueになる)
→ trueになった10を返り値として返すから a = 10
という式になる
余談: ※Rubyでは変数は nil, falseでない限り、true
kara = ''
n_hoge = 0
p 'true' if kara # <= true
p 'true' if n_hoge # <= true
#まとめ (結論)
a ||= 10
は変数aが存在しない(又はnilやfalse)なら、右辺の10を変数aに代入する
理解できると、めちゃくちゃ楽しい!
(/・ω・)/