Non, il n'y a pas d' nor
opérateur dans un langage de programmation grand public de haut niveau.
Pourquoi ?
Principalement parce qu'il est difficile à lire:
- il nécessite la combinaison mentale de plusieurs opérateurs (" et pas ", ou dans un style plus littéraire: " encore négatif ", " chaque faux " )
- cela implique un implicite
not
sur le premier opérande, mais le lecteur ne le comprendra que plus tard
- il est différent des langages humains, qui utilisent une négation explicite sur le premier opérande, telle que " ni x ni y ", " ni x ni y ". Donc, un lecteur pourrait confondre
(x nor y)
avec (x and not y)
au lieu de((not x) and (not y))
- certains lecteurs sont confondus avec la
or
sémantique apparente qui ne s'applique pas
Mais c'est tellement courant dans le matériel ...
nor
est une porte matérielle élémentaire qui peut être utilisée pour créer toutes les autres portes logiques. On pourrait donc soutenir que tous les autres opérateurs logiques sont des combinaisons et qu’il nor
s’agit de l’opérateur logique élémentaire le plus simple.
Cependant, ce qui est vrai pour le matériel n'est pas nécessairement vrai pour les humains. Et malgré sa popularité au niveau matériel, certains processeurs traditionnels n’offrent même pas d’ NOR
instructions d’assemblage (par exemple x86 ).
Des alternatives
La lisibilité est importante. Et parfois, cela peut être amélioré par d'autres moyens.
Utilisation des opérateurs existants
Par exemple:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Commande de conditions
if x==1 or x==2
action A
else
action B
au lieu de
if x!=1 and x!=2
action B
else
action A
Utilisation de jusqu'à boucle
Certaines langues offrent également des instructions en boucle qui permettent d’exprimer des conditions avec while
ou avec until
, vous permettant de choisir la méthode la plus "positive". Ces instructions sont par exemple until c do ...
en ruby , do until c ...
en vb ou repeat ... until c
en pascal et ses descendants.
Par exemple:
Until (x==1 or x==2) do
...
est équivalent à:
While (x!=1 and x!=2)
...
Faire une fonction
Maintenant, si vous préférez toujours la nor
syntaxe, vous pouvez définir une fonction, mais uniquement si vous ne vous attendez pas à ce qu'un raccourci se produise:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Il y a un avantage de lisibilité de la fonction sur l'opérateur, car le lecteur comprend immédiatement que la négation s'applique à tous les arguments. Dans certaines langues, vous pouvez définir une fonction avec un nombre variable d'arguments.
or
et!
, et parce que les doubles négations sont rarement utilisées - la plupart des gens les trouvent particulièrement difficiles à lire.