Não, não existe noroperador em nenhuma linguagem de programação convencional de alto nível.
Por quê ?
Principalmente porque é difícil ler:
- requer a combinação mental de vários operadores (" e não ", ou em um estilo mais literário: " mais negativo ", " cada falso " )
- implica implícito
notno primeiro operando, mas o leitor só entende isso depois
- é diferente das linguagens humanas, que usam uma negação explícita no primeiro operando, como " nem x nem y ", " nem x nem y ". Portanto, um leitor pode confundir
(x nor y)com, em (x and not y)vez de((not x) and (not y))
- alguns leitores estão confusos com a aparente
orsemântica que não se aplica
Mas é tão comum em hardware ...
noré um portão de hardware elementar que pode ser usado para criar todos os outros portões lógicos. Portanto, alguém poderia argumentar que todos os outros operadores lógicos são combinações e noré o operador lógico elementar mais simples.
No entanto, o que é verdade para o hardware não é necessariamente verdadeiro para os humanos. E apesar da popularidade no nível do hardware, algumas CPUs convencionais nem oferecem um NORem seu conjunto de instruções do assembler (por exemplo, x86 ).
Alternativas
Legibilidade é importante. E, às vezes, pode ser aprimorado por outros meios.
Uso de operadores existentes
Por exemplo:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Ordenação de condições
if x==1 or x==2
action A
else
action B
ao invés de
if x!=1 and x!=2
action B
else
action A
Uso do loop até
Alguns idiomas também oferecem instruções de loop que permitem expressar condições com whileou com until, permitindo que você escolha a maneira mais "positiva". Estas instruções são por exemplo until c do ...em rubi , do until c ...em v , ou repeat ... until cem Pascal e seus descendentes.
Por exemplo:
Until (x==1 or x==2) do
...
é equivalente a:
While (x!=1 and x!=2)
...
Faça uma função
Agora, se você ainda prefere a norsintaxe, pode definir uma função, mas apenas se não espera que um atalho ocorra:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Há uma vantagem de legibilidade da função sobre o operador, porque o leitor imediatamente entende que a negação se aplica a todos os argumentos. Em alguns idiomas, você pode definir uma função com um número variável de argumentos.
ore!, e porque duplos negativos raramente são usados - a maioria das pessoas os acha especialmente difíceis de ler.