回答:
andと同じですが、優先順位&&が低くなります。どちらも短絡評価を使用しています。
警告:and優先順位がさらに低くなる=ため、通常は回避する必要がありandます。and使用すべき例は、Railsガイドの「ダブルレンダリングエラーの回避」にあります。
&&、and非常に特殊な場合にのみ使用するように指定することをお勧めします。
andは、反転ifステートメント修飾子としてです:にnext if widget = widgets.popなりwidget = widgets.pop and nextます。これは、それを置くのに最適な方法です。本当に頭の中で「クリック」しました。(そしてor反転unless修飾子のようです。)
実用的な違いは結合の強さです。準備ができていないと、奇妙な動作を引き起こす可能性があります。
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
同じことがのために働く||とor。
a = foo and bar そして、 それよりも優先順位が低い(a = foo ) && barことを証明しandます&&。
a = foo and barと同等(a = :foo) and nilです。割り当ては論理的に真の値(:foo)を返すため、2番目の部分が評価され、失敗してが返されnilます。
Rubyのスタイルガイドは、私ができるより良い、それを言います:
&& / ||を使用 ブール式、および/または制御フロー。(経験則:外側の括弧を使用する必要がある場合は、間違った演算子を使用しています。)
# boolean expression
if some_condition && some_other_condition
do_something
end
# control flow
document.saved? or document.save!
||そして&&あなたがプログラミング言語で論理演算子に期待することを優先してバインドが(&&非常に強く、||やや少ない強力です)。
andor優先順位が低くなります。
たとえば、とは異なり||、の or優先順位は=次のとおりです。
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
同様に、とは異なり&&、次のandものよりも優先順位が低くなり=ます。
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
異なり、より多くの何&&と||、andそしてor同じ優先順位と結合します:
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
弱いバインディングandでorあり、制御フローの目的に役立つ場合があります。http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby/を参照してください。
||、orよりも優先順位が低くなります=」
andの優先順位はよりも低くなってい&&ます。
しかし、気取らないユーザーにとっては、優先順位が間にある他の演算子、たとえば代入演算子と一緒に使用すると問題が発生する可能性があります。
def happy?() true; end
def know_it?() true; end
todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"
todo
# => "Clap your hands"
todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"
todo
# => true
and優先順位は低く、主に次のような制御フロー修飾子として使用しますif。
next if widget = widgets.pop
なる
widget = widgets.pop and next
の場合or:
raise "Not ready!" unless ready_to_rock?
なる
ready_to_rock? or raise "Not ready!"
私が使用することを好むifが、ないandので、ifより分かりやすいです私は無視して、andとor。
詳細については、「Rubyでの「and」および「or」の使用」を参照してください。
これがRubyの意図なのか、それともバグなのかはわかりませんが、以下のコードを試してください。このコードはRubyバージョン2.5.1で実行され、Linuxシステムで実行されました。
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
or||もご覧ください。