私はいくつかの個人的な実験から、if文に似ていると思われるルビー "と"/"& &"の動作を見ました。rubyの場合と同じように&&( "and")を使用しますか?
condition && action
if condition
action
end
と同じことをやっているように見えるが、これらと同等か?
私はいくつかの個人的な実験から、if文に似ていると思われるルビー "と"/"& &"の動作を見ました。rubyの場合と同じように&&( "and")を使用しますか?
condition && action
if condition
action
end
と同じことをやっているように見えるが、これらと同等か?
いいえ、正確には同じではありません。
condition
場合false
です:
condition && action
がnil
を返しますfalse
が、
if condition
action
end
を返します。
小さな微妙な違いですが、小さな違いは大きなバグにつながる可能性があります。
これは、&&
の短絡によるものです。
テイクa && b
。 a
が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を指摘したように。つまり、true
とfalse
はではなく、のRubyの唯一の真実と偽の値です。実際には、nil
またはfalse
を除くRubyのすべての値は真実であり、2つの例外が偽りです。文字列"false"
と数字0
は、これらの2つの例外の1つではないので、実際に真実です。 a
がb
は未評価のままにしてa && b
は、a
の値を返し、その後、falsey値と評価された場合
現在、完全にa && b
の振る舞いを記述することができます。
a
がtruthy値に評価された場合、a && b
はb
の値を返し、結果としてa
とb
の両方が評価されます。両方とと& &短絡評価であるが、& &は、高優先度とを取り、が低い優先されます。以下はカップル一例であり、
a = 1
b = 2
c = a and b
# => 2
c
# => 1
c = a && b
# => 2
c
# => 2
そこで、我々はいくつかの特定の場所でとを使用する必要があります。
'=>'( '#=>'または '#=>')の前にシャープ記号( '#')を入れておけば、追加の編集をせずにコードを実行することができます。これは一般的なコメントであり、この質問に固有のものではありません。 'c = aとb'は'(c = a)とb 'に相当し、 'c = a && b'は' c =(a && b) 'と同じであることを指摘したいかもしれません。 –
@CarySwoveland:私はちょうど答えを更新しました、ありがとうございます。 – Mohanraj
質問は '&&'と' and'ではなく 'if'と' &&'についてです。 –
「偽」と評価されるelseブランチを含めれば、それらを同一にすると思います。それ以外の場合、if式は 'nil'を返します。 –
ほぼ同等です。 [Precedence](https://ruby-doc.org/core-2.4.1/doc/syntax/precedence_rdoc.html)との違いがあります。 '&&'はより高い優先順位の操作です。 – Med
@ sagarpandya82:elseブランチは 'condition'を返さなければなりません。 –