Je me souviens avoir lu quelque part notet !é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 andet or.
!a la priorité la plus élevée de tous les opérateurs, et l' notune 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, nota une priorité inférieure à true && false, donc cela "commuté" le falsede 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.
unlessdans ce cas?
unlessn'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.
unlesssoit défavorisé. La chose la plus proche d'un consensus dit le contraire.
notpeut ê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 = !yfonctionne, mais x = not yobtient 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).