Je me souviens d'avoir lu quelque part que not
et !
sont évalués différemment et je ne le trouve pas dans la documentation. Sont-ils synonymes?
Ils sont presque synonymes, mais pas tout à fait. La différence est que !
a une priorité plus élevée que not
, un peu comme &&
et ||
ont une priorité supérieure à and
et or
.
!
a la priorité la plus élevée parmi tous les opérateurs, et not
l'un des plus bas, vous pouvez trouver la table complète à la Ruby docs .
À titre d'exemple, considérons:
!true && false
=> false
not true && false
=> true
Dans le premier exemple, !
a la priorité la plus élevée , donc vous dites effectivement false && false
.
Dans le deuxième exemple, not
a une priorité inférieure à true && false
, donc ceci "a changé" le false
de true && false
à true
.
La ligne directrice générale semble être que vous devriez vous en tenir à !
, sauf si vous avez une raison particulière d’utiliser not
. !
in Ruby se comporte comme la plupart des autres langues et est "moins surprenant" que not
.
Un moyen simple de comprendre l’opérateur not
consiste à considérer not true && false
Comme étant équivalent à !(true && false)