Não, não há nenhum operador nor
em qualquer linguagem de programação mainstream de alto nível.
Por quê?
Principalmente porque é difícil de 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 um 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 ". Então, um leitor pode confundir
(x nor y)
com (x and not y)
em vez de ((not x) and (not y))
- alguns leitores estão confusos com a aparente semântica
or
que não se aplica
Mas é tão comum em hardware ...
nor
é um portão de hardware elementar que pode ser usado para criar todas as outras portas lógicas. Assim, pode-se 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 de sua popularidade no nível de hardware, algumas CPUs convencionais nem sequer oferecem NOR
em seu conjunto de instruções assembler (por exemplo, x86 ).
Alternativas
Questões de legibilidade. E às vezes pode ser melhorado 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
em vez de
if x!=1 and x!=2
action B
else
action A
Uso de loop até
Alguns idiomas também oferecem instruções em loop que permitem expressar condições com while
ou until
, permitindo que você escolha a maneira mais "positiva". Essas instruções são, por exemplo, until c do ...
em ruby , do until c ...
em vb , 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 preferir a sintaxe nor
, poderá definir uma função, mas somente se não esperar que um atalho aconteça:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Existe uma vantagem de legibilidade da função sobre o operador, porque o leitor compreende imediatamente 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.