Je me souviens avoir lu quelque part not
et !
évalué différemment, et je ne le trouve pas dans la documentation. Sont-ils synonymes?
ruby
boolean-logic
0112
la source
la source
Réponses:
Ils le sont presque, mais pas tout à fait. La différence est que
!
a une priorité plus élevée quenot
, tout comme&&
et||
sont de priorité plus élevée queand
etor
.!
a la priorité la plus élevée de tous les opérateurs, et l'not
une des plus basses, vous pouvez trouver le tableau complet dans la documentation Ruby .À titre d'exemple, considérons:
Dans le premier exemple,
!
a la priorité la plus élevée , vous dites donc effectivementfalse && false
.Dans le deuxième exemple,
not
a une priorité inférieure àtrue && false
, donc cela "commuté" lefalse
detrue && false
àtrue
.La règle générale semble être que vous devriez vous en tenir
!
, à moins que vous n'ayez une raison spécifique d'utilisernot
.!
in Ruby se comporte de la même manière que la plupart des autres langages et est "moins surprenant" quenot
.la source
unless
dans ce cas?unless
n'est tout simplement pas vraiment favorisé dans le monde du rubis. Le consensus général est que cela ne fait que gêner lorsque cela!
fonctionne aussi bien dans la plupart des situations. Je suis sûr qu'il y a des cas où moins peut être plus expressif, mais je reste clair.unless
soit défavorisé. La chose la plus proche d'un consensus dit le contraire.not
peut être surprenant . En Python, j'attribue parfois des booléens aux variables pour rendre les instructions if plus faciles à lire. Cela peut signifier utiliser le modèlex = not y
, où y est quelque chose de complexe. Dans Ruby,x = !y
fonctionne, maisx = not y
obtientsyntax error, unexpected tIDENTIFIER, expecting '('
. L'ordre de priorité signifie que ce besoin des parenthèses autour du droit de l'affectation op au travail:x = (not y)
.Un moyen simple de comprendre l'
not
opérateur est de le considérernot true && false
comme équivalent à!(true && false)
la source