Não, não existe nor
operador 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
not
no 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
or
semâ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 NOR
em 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 while
ou 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 c
em 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 nor
sintaxe, 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.
or
e!
, e porque duplos negativos raramente são usados - a maioria das pessoas os acha especialmente difíceis de ler.