No, non esiste un nor
operatore 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
not
sul 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
or
semantico 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 NOR
set 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 while
o 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 c
in 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 nor
sintassi, 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.
or
e!
, e perché i doppi negativi sono usati raramente - la maggior parte delle persone li trova particolarmente difficili da leggere.