LoginSignup
21
9

More than 3 years have passed since last update.

Ruby の || を使った自己代入演算子

Last updated at Posted at 2019-03-02
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 (演算子)= ba = a (演算子) b と同じ意味
例)
a += ba = a + b
a **= ba = 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に代入する

理解できると、めちゃくちゃ楽しい!

(/・ω・)/

21
9
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
21
9