2017-08-30 3 views
3

私はいくつかの個人的な実験から、if文に似ていると思われるルビー "と"/"& &"の動作を見ました。ruby​​の場合と同じように&&( "and")を使用しますか?

condition && action 

if condition 
    action 
    end 

と同じことをやっているように見えるが、これらと同等か?

+0

「偽」と評価されるelseブランチを含めれば、それらを同一にすると思います。それ以外の場合、if式は 'nil'を返します。 –

+0

ほぼ同等です。 [Precedence](https://ruby-doc.org/core-2.4.1/doc/syntax/precedence_rdoc.html)との違いがあります。 '&&'はより高い優先順位の操作です。 – Med

+0

@ sagarpandya82:elseブランチは 'condition'を返さなければなりません。 –

答えて

1

いいえ、正確には同じではありません。

condition場合falseです:

condition && action 

nilを返しますfalseが、

if condition 
    action 
end 

を返します。

小さな微妙な違いですが、小さな違いは大きなバグにつながる可能性があります。

4

これは、&&の短絡によるものです。

テイクa && baがfalseと評価された場合、式はbに関係なくfalseであるため、時間を無駄にするのを避けるため、bは評価されません。 bは、aがtrueと評価された場合にのみ評価する必要があります。

||( 'または')と同様の短絡動作があります。あなたはそれが何であるかを考えることができますか?

[編集]

ホルガーだけではただ、when I say a "true" value in Ruby, I mean any truthy value, and when I mention a "false" value in Ruby, I mean any falsey valueを指摘したように。つまり、truefalseではなく、のRubyの唯一の真実と偽の値です。実際には、nilまたはfalseを除くRubyのすべての値は真実であり、2つの例外が偽りです。文字列"false"と数字0は、これらの2つの例外の1つではないので、実際に真実です。 abは未評価のままにしてa && bは、aの値を返し、その後、falsey値と評価された場合

  • 現在、完全にa && bの振る舞いを記述することができます。

  • aがtruthy値に評価された場合、a && bbの値を返し、結果としてabの両方が評価されます。
+2

答えに「偽」と言ったときはいつも、それは実際には虚偽の値(すなわち、文字通り '' nil''または '' false'')であり、 "true"と言えば、そのすべてのtruethy値'nil'や' false'よりも)。 –

+0

私は真実性に何度も噛まれました。 ''偽 ''(文字列として)も真実です。 – moveson

+0

@CarySwovel私はいくつかの提案を取り入れました。 – ogogmad

1

両方& &短絡評価であるが、& &は、高優先度とを取り、が低い優先されます。以下はカップル一例であり、

a = 1 
b = 2 
c = a and b 
# => 2 
c 
# => 1 
c = a && b 
# => 2 
c 
# => 2 

そこで、我々はいくつかの特定の場所でを使用する必要があります。

+0

'=>'( '#=>'または '#=>')の前にシャープ記号( '#')を入れておけば、追加の編集をせずにコードを実行することができます。これは一般的なコメントであり、この質問に固有のものではありません。 'c = aとb'は'(c = a)とb 'に相当し、 'c = a && b'は' c =(a && b) 'と同じであることを指摘したいかもしれません。 –

+0

@CarySwoveland:私はちょうど答えを更新しました、ありがとうございます。 – Mohanraj

+0

質問は '&&'と' and'ではなく 'if'と' &&'についてです。 –