No, no hay nor
operador en ningún lenguaje de programación convencional de alto nivel.
Por qué ?
Principalmente porque es difícil de leer:
- requiere la combinación mental de varios operadores (" y no ", o en un estilo más literario: " más negativo ", " cada falso " )
- implica un implícito
not
en el primer operando, pero el lector solo entiende esto después
- es diferente de los lenguajes humanos, que usan una negación explícita en el primer operando, como " ni x ni y ", " ni x ni y ". Entonces un lector podría confundir
(x nor y)
con en (x and not y)
lugar de((not x) and (not y))
- algunos lectores están confundidos con la aparente
or
semántica que no aplica
Pero es tan común en el hardware ...
nor
es una puerta de hardware elemental que se puede usar para hacer todas las otras puertas lógicas. Entonces, uno podría argumentar que todos los demás operadores lógicos son combinaciones y nor
es el operador lógico elemental más simple.
Sin embargo, lo que es cierto para el hardware no es necesariamente cierto para los humanos. Y a pesar de su popularidad a nivel de hardware, algunas CPU convencionales ni siquiera ofrecen un NOR
conjunto de instrucciones en su ensamblador (por ejemplo, x86 ).
Alternativas
La legibilidad importa. Y a veces se puede mejorar por otros medios.
Uso de operadores existentes.
Por ejemplo:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Ordenamiento de condiciones
if x==1 or x==2
action A
else
action B
en lugar de
if x!=1 and x!=2
action B
else
action A
Uso de hasta bucle
Algunos idiomas también ofrecen instrucciones de bucle que permiten expresar condiciones con while
o con until
, lo que le permite elegir la forma más "positiva". Estas instrucciones son, por ejemplo, until c do ...
en rubí , do until c ...
en vb o repeat ... until c
en pascal y sus descendientes.
Por ejemplo:
Until (x==1 or x==2) do
...
es equivalente a:
While (x!=1 and x!=2)
...
Hacer una función
Ahora, si aún prefiere la nor
sintaxis, puede definir una función, pero solo si no espera que ocurra un acceso directo:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Hay una ventaja de legibilidad de la función sobre el operador, porque el lector comprende de inmediato que la negación se aplica a todos los argumentos. En algunos idiomas, puede definir una función con un número variable de argumentos.
or
y!
porque rara vez se usan dobles negativos, la mayoría de las personas los encuentran especialmente difíciles de leer.