回答:
それらはほとんど同義語ですが、完全ではありません。違いがあるということ!
よりも高い優先順位を持つnot
多くのと同じように、&&
そして||
より高い優先順位であるand
とor
。
!
すべての演算子の中で最も優先順位が高くnot
、最も低い演算子の1つは、Rubyのドキュメントに完全な表があります。
例として、次のことを考慮してください。
!true && false
=> false
not true && false
=> true
最初の例で!
は、が最も優先順位が高いので、効果的にと言っていfalse && false
ます。
2番目の例でnot
は、の優先順位がよりも低いtrue && false
ため、これはをfalse
からtrue && false
に「切り替え」ましたtrue
。
一般的なガイドラインでは!
、使用する特別な理由がない限り、それを守る必要があるようnot
です。!
Rubyでは、他のほとんどの言語と同じように動作し、よりも「驚くべきことはありません」not
。
unless
その場合に使用できますか?
unless
ルビーの世界ではあまり好まれていません。一般的なコンセンサスは!
、ほとんどの状況でうまく機能するときに邪魔になるということです。きっともっと表現力豊かでないかもしれないようなケースもあると思いますが、私は明確にします。
unless
嫌われているとは思いません。私たちがコンセンサスに最も近いものはそうではありません。
not
ことの例を共有したかっただけです。Pythonでは、ifステートメントを読みやすくするために、変数にブール値を割り当てることがあります。これはx = not y
、yが複雑なパターンを使用することを意味する場合があります。Rubyではx = !y
動作しますが、をx = not y
取得しsyntax error, unexpected tIDENTIFIER, expecting '('
ます。優先順位は、これが機能するために、代入演算の右側を括弧で囲む必要があることを意味しますx = (not y)
。