読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

前記事でのRuby資格問題集の補足

久しぶりに論理演算子の記事について見返していたのですが、説明が少し足りてませんでした。おかげで考えて唸っていました。

Ruby公式サイトから引用すると、ANDとORは以下の様な処理をするようです。

ANDの説明:左辺を評価し、結果が偽であった場合はその値(つまり nil か false) を返します。左辺の評価結果が真であった場合には 右辺を評価しその結果を返します。 and は同じ働きをする優先順位の低い演算子です。 ORの説明:左辺を評価し、結果が真であった場合にはその値を返します。 左辺の評価結果が偽であった場合には右辺を評価し その評価結果を返します。 or は同じ働きをする優先順位の低い演算子です。

ANDとORは逆の動作をするわけですね。これを踏まえて以下の制御文が読み解けます。頭の運動に良いかも。

if true && true; 1; end #=> 1
if nil && 10; 1; end #=> nil
if false || true; 1; end #=> 1
if nil || false; 1; end #=> nil
if !true; 1; end #=> nil

これもいけそうですね。

a = nil && 1 #=> nil
a = 1 || 2 #=> 1
b = b || 1 #bが初期化していない(nil)場合に1を格納
c ||= 1 #cが初期化していない(nil)場合に1を格納
p 1 && 2 # p (1 && 2)と同義。2が出力される。
p 1 and 2 # p (1) and 2と同義。1が出力される。
p (1 and 2) # 2が出力される

上記のコードで演算子の優先順位に関する知識も必要ですが、その都度覚えていくという形になりそうですね。詳しくは参考サイトで。

参考サイト

http://docs.ruby-lang.org/ja/1.9.3/doc/spec=2foperator.html