Je me souviens avoir lu quelque part not
et !
évalué différemment, et je ne le trouve pas dans la documentation. Sont-ils synonymes?
Réponses:
Ils le sont presque, mais pas tout à fait. La différence est que !
a une priorité plus élevée que not
, tout comme &&
et ||
sont de priorité plus élevée que and
et or
.
!
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:
!true && false
=> false
not true && false
=> true
Dans le premier exemple, !
a la priorité la plus élevée , vous dites donc effectivement false && false
.
Dans le deuxième exemple, not
a une priorité inférieure à true && false
, donc cela "commuté" le false
de true && 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'utiliser not
. !
in Ruby se comporte de la même manière que la plupart des autres langages et est "moins surprenant" que not
.
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èle x = not y
, où y est quelque chose de complexe. Dans Ruby, x = !y
fonctionne, mais x = not y
obtient syntax 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)
.