No, non esiste un operatore nor
in nessun linguaggio di programmazione mainstream 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 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 confondere
(x nor y)
con (x and not y)
invece di ((not x) and (not y))
- alcuni lettori sono confusi con l'apparente
or
semantica che non si applica
Ma è così comune nell'hardware ...
nor
è un gate hardware elementare che può essere utilizzato per creare tutte le altre porte logiche. Quindi si potrebbe sostenere che tutti gli altri operatori logici sono combinazioni e 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
nel set di istruzioni assembler (ad esempio x86 ).
Alternative
La leggibilità è importante. E a volte può essere migliorato con altri mezzi.
Uso di operatori esistenti
Ad 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 until loop
Alcune lingue offrono anche istruzioni di ciclo che consentono di esprimere condizioni con while
o con until
, consentendo 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 i suoi discendenti.
Ad esempio:
Until (x==1 or x==2) do
...
è equivalente a:
While (x!=1 and x!=2)
...
Crea una funzione
Ora, se preferisci ancora la sintassi nor
, potresti definire una funzione, ma solo se non prevedi che si verifichi un collegamento:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
C'è un vantaggio di leggibilità della funzione rispetto all'operatore, poiché il lettore capisce immediatamente che la negazione si applica a tutti gli argomenti. In alcune lingue è possibile definire una funzione con un numero variabile di argomenti.