ルビの `not`と`! `の違い


回答:


143

それらはほとんど同義語ですが、完全ではありません。違いがあるということ!よりも高い優先順位を持つnot多くのと同じように、&&そして||より高い優先順位であるandor

!すべての演算子の中で最も優先順位が高くnot、最も低い演算子の1つは、Rubyのドキュメントに完全な表があります。

例として、次のことを考慮してください。

!true && false
=> false

not true && false
=> true

最初の例で!は、が最も優先順位が高いので、効果的にと言っていfalse && falseます。
2番目の例でnotは、の優先順位がよりも低いtrue && falseため、これはをfalseからtrue && falseに「切り替え」ましたtrue

一般的なガイドラインでは!、使用する特別な理由がない限り、それを守る必要があるようnotです。!Rubyでは、他のほとんどの言語と同じように動作し、よりも「驚くべきことはありません」not


6
否定条件式を読みやすくするために、過去に「not」を使用しました。条件式の全体を否定する必要がある場合は、「!」ではなく「not」を使用するのが快適だと感じました。Iそれのように私のコードはinglushのように読み込み
jaydel

@jaydel unlessその場合に使用できますか?
Jacob

1
@ジェイコブ、はい、間違いなく。unlessルビーの世界ではあまり好まれていません。一般的なコンセンサスは!、ほとんどの状況でうまく機能するときに邪魔になるということです。きっともっと表現力豊かでないかもしれないようなケースもあると思いますが、私は明確にします。
ブレナン

4
unless嫌われているとは思いません。私たちがコンセンサスに最も近いものはそうではありません。
Adam Lassek

1
驚くべきnotことの例を共有したかっただけです。Pythonでは、ifステートメントを読みやすくするために、変数にブール値を割り当てることがあります。これはx = not y、yが複雑なパターンを使用することを意味する場合があります。Rubyではx = !y動作しますが、をx = not y取得しsyntax error, unexpected tIDENTIFIER, expecting '('ます。優先順位は、これが機能するために、代入演算の右側を括弧で囲む必要があることを意味しますx = (not y)
S.カービー

13

not演算子を理解する簡単な方法はnot true && false、以下と同等であると見なすことです。!(true && false)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.