No, non esiste un noroperatore in alcun linguaggio di programmazione tradizionale di alto livello.
Perché ?
Principalmente perché è difficile da leggere:
- richiede la combinazione mentale di più operatori (" e non ", o in uno stile più letterario: " ulteriore negativo ", " ogni falso " )
- implica un implicito
notsul primo operando, ma il lettore lo capisce solo in seguito
- è diverso dai linguaggi umani, che usano una negazione esplicita sul primo operando, come " né x né y ", " né x né y ". Quindi un lettore potrebbe confondersi
(x nor y)con (x and not y)invece di((not x) and (not y))
- alcuni lettori sono confusi con l'apparente
orsemantico che non si applica
Ma è così comune nell'hardware ...
norè un gate hardware elementare che può essere utilizzato per realizzare tutte le altre porte logiche. Quindi si potrebbe sostenere che tutti gli altri operatori logici sono combinazioni ed norè l'operatore logico elementare più semplice.
Tuttavia, ciò che è vero per l'hardware non è necessariamente vero per gli umani. E nonostante la sua popolarità a livello hardware, alcune CPU tradizionali non offrono nemmeno un NORset di istruzioni assembler (ad es. X86 ).
alternative
La leggibilità è importante. E a volte può essere migliorato con altri mezzi.
Uso di operatori esistenti
Per esempio:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Ordinamento delle condizioni
if x==1 or x==2
action A
else
action B
invece di
if x!=1 and x!=2
action B
else
action A
Uso di fino ad anello
Alcune lingue offrono anche istruzioni cicliche che consentono di esprimere le condizioni con whileo con until, permettendoti di scegliere il modo più "positivo". Queste istruzioni sono ad esempio until c do ...in rubino , do until c ...in vb o repeat ... until cin pascal e suoi discendenti.
Per esempio:
Until (x==1 or x==2) do
...
è equivalente a:
While (x!=1 and x!=2)
...
Crea una funzione
Ora, se preferisci ancora la norsintassi, potresti definire una funzione, ma solo se non prevedi che accada un collegamento:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Esiste un vantaggio di leggibilità della funzione rispetto all'operatore, poiché il lettore comprende immediatamente che la negazione si applica a tutti gli argomenti. In alcune lingue è possibile definire una funzione con un numero variabile di argomenti.
ore!, e perché i doppi negativi sono usati raramente - la maggior parte delle persone li trova particolarmente difficili da leggere.