dポイントプレゼントキャンペーン実施中!

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を教えていただけますと助かります。

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

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

A 回答 (1件)

演算子式 - Rubyリファレンスマニュアル


http://www.ruby-lang.org/ja/man/html/_B1E9BBBBBB …

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

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

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

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


なお、ショートサーキットはPerlで割と良く出てきます。
    • good
    • 0
この回答へのお礼

Werner様

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

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

お礼日時:2009/04/29 19:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!