web-dev-qa-db-ja.com

「または」と||の違いRubyで?

Rubyのor演算子と||演算子の違いは何ですか?それとも単に好みですか?

162
Alex Baranosky

演算子の優先順位の問題です。

||は、orよりも優先順位が高くなっています。

したがって、2つの間には、3項(? :)や代入(=)などの他の演算子があり、どちらを選択するとステートメントの結果に影響を与えることができます。

Ruby演算子の優先順位テーブル です。

and/&&を使用した別の例については、 この質問 を参照してください。

また、発生する可能性があるいくつかの厄介なことに注意してください。

a = false || true  #=> true
a  #=> true

a = false or true  #=> true
a  #=> false

前の2つのステートメントは両方ともtrueに評価されますが、2番目は=優先順位が||より低いがaより高いため、falseorに設定します。

215
mopoke

他の人がすでに説明したように、onlyの違いが優先です。ただし、実際には2つの間にtwoの違いがあることを指摘したいと思います。

  1. andor、およびnotは、much&&||、および!よりも優先順位が低い
  2. andorの優先順位は同じで、&&の優先順位は||よりも高いです

一般的に、andor、およびnotの使用を避け、代わりに&&||、および!を使用するのが良いスタイルです。 (たとえば、Railsコア開発者は、演算子フォームの代わりにキーワードフォームを使用するパッチを拒否します。)

それらが存在する理由は、ブール式ではなく、制御フローのためです。彼らは、Perlの有名なdo_this or do_thatイディオムを介してRubyに入りました。ここで、do_thisfalseまたはエラーがある場合はnilを返しますその場合のみdo_thatが代わりに実行されます。 (類似、do_this and then_do_thatイディオムもあります。)

例:

download_file_via_fast_connection or download_via_slow_connection
download_latest_currency_rates and store_them_in_the_cache

これにより、制御フローがifまたはunlessを使用するよりも少し流になる場合があります。

この場合、演算子が「間違った」(つまり同一の)優先順位を持っている理由は簡単にわかります。とにかく同じ式で一緒に表示されることはありません。そしてdoが一緒に現れると、一般的にwant単純に左から右に評価されます。

73
Jörg W Mittag

および/または制御フロー用です。

Rubyはこれを有効な構文として許可しません。

false || raise "Error"

ただし、これは有効です。

false or raise "Error"

最初の作業は()で行うことができますが、orを使用するのが正しい方法です。

false || (raise "Error")
38
Eadz

puts false or true->出力:false

puts false || true->出力:true

11
Radek Secka

これらの演算子の使用方法:

||, &&はブール論理用です。 or, andは制御フロー用です。例えば。

do_smth if may_be || may_be-ここで条件を評価します

do_smth or do_smth_else-ワークフローを定義します。これはdo_smth_else unless do_smthと同等です

簡単な例を挙げます:

> puts "a" && "b" b

> puts 'a' and 'b' a

Railsでよく知られているイディオムはrender and returnです。 return if renderとは言えませんが、render && returnは機能しません(Rails documentation を参照)

9
Vadym Tyemirov

または||と同じではありません

||のみを使用or演算子の代わりの演算子。

理由:

  • or演算子はよりも優先順位が低い
  • またはは代入演算子よりも優先順位が低い
  • andorは同じ優先順位を持ち、&&はより高い優先順位を持ちます
2
vel pradeep.MS

「または」と「||」の両方いずれかのオペランドがtrueの場合、trueと評価されます。最初のオペランドが偽の場合にのみ、2番目のオペランドを評価します。

「and」と同様に、「or」と「||」の唯一の違い優先順位です。

人生を面白くするために、「and」と「or」の優先順位は同じですが、「&&」の優先順位は「||」よりも高くなっています。

1
cvibha