回答:
それらはほとんど同義語ですが、完全ではありません。違いがあるということ!よりも高い優先順位を持つ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)。