こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

rubyの構文(&&を用いた条件分岐について)

ruby初心者です。
最近、ruby on railsで書かれたソースを引き継ぎ解析を行っています。

その中で、以下のような構文が出てきました。
=========================================
num = 0
bool = false
vals = ''

puts 'start'

num == 0 && bool &&
if vals
 puts 'true'
else
 puts 'false'
end

puts 'end'
=========================================

上記プログラムを実行すると、if ~ end までが実行されませんでした。
そこで、変数boolをtrueに変更して再実行したところ、if文が実行されました。

そこで私は、上記プログラムは以下と同値であると解釈しました。
======================================
(省略)
if num == 0 && bool
 if vals
  puts 'true'
 else
  puts 'false'
 end
end
=======================================

以上を踏まえて・・・
1.私の解釈は正しいでしょうか?
2.間違っている場合、正しい処理の解釈を教えていただけますでしょうか?または参考URLを教えていただけますと助かります。

文の最後に"&&"がついている文を見たことがなく、ネットで調べても
正解らしいものが掲載されていなかったので質問させていただきました。

拙い説明で申し訳ありませんが、よろしくお願いいたします。

投稿日時 - 2009-04-28 19:53:02

QNo.4916327

困ってます

質問者が選んだベストアンサー

演算子式 - Rubyリファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html#and

&& はショートサーキット論理演算子の一種なので、
 式A && 式B
としたときは、
まず左辺の式Aが評価され、
その結果が真であった場合のみ右辺の式Bも評価されます。
もし、式Aが偽であれば式Bは評価(実行)されません。

そのため、式Aが真の時にのみ式Bを実行したいときに
上記の様な書き方をすることが可能です。

また、rubyにおいてifは式なので式Bはif式でも大丈夫です。
(C言語などとは違ってrubyのifは「値を持つ式」だったりします。)

# 合ってるか間違ってるかはあえて明言しませんでしたがこの説明でそれは判断できますよね?


なお、ショートサーキットはPerlで割と良く出てきます。

投稿日時 - 2009-04-28 20:20:46

お礼

Werner様

早速の回答ありがとうございました。
C言語とPHPしか主に触っていなかったので、まず文法に面食らってしまっていました。。。

ifも式と考えれば自然な書き方ですね(慣れるまで大変そうですが…)
明解な回答に感謝いたします。

投稿日時 - 2009-04-29 19:58:40

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問