Nein, es gibt keinen nor
Operator in irgendeiner gängigen Programmiersprache.
Warum ?
Hauptsächlich, weil es schwer zu lesen ist:
- es erfordert die mentale Kombination mehrerer Operatoren (" und nicht " oder in einem literarischeren Stil: " weiter negativ ", " jeweils unwahr " )
- es impliziert einen Impliziten
not
für den ersten Operanden, aber der Leser versteht dies erst danach
- Es unterscheidet sich von menschlichen Sprachen, die eine explizite Negation des ersten Operanden verwenden, z. B. " weder x noch y ", " noch x noch y ". Ein Leser könnte also
(x nor y)
mit (x and not y)
statt mit verwechseln((not x) and (not y))
- Einige Leser sind verwirrt mit der scheinbaren
or
Semantik, die nicht zutrifft
Aber es ist so üblich in Hardware ...
nor
ist ein elementares Hardware-Gatter , mit dem alle anderen logischen Gatter erstellt werden können. Man könnte also argumentieren, dass alle anderen logischen Operatoren Kombinationen sind und nor
der einfachste elementare logische Operator sind.
Was für die Hardware zutrifft, trifft jedoch nicht unbedingt auf die Menschen zu. Und trotz ihrer Beliebtheit auf Hardware-Ebene bieten einige Mainstream-CPUs nicht einmal einen NOR
Assembler-Befehlssatz (z . B. x86 ) an.
Alternativen
Lesbarkeit ist wichtig. Und manchmal kann es auf andere Weise verbessert werden.
Nutzung vorhandener Operatoren
Zum Beispiel:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Bestellung von Konditionen
if x==1 or x==2
action A
else
action B
Anstatt von
if x!=1 and x!=2
action B
else
action A
Verwendung von till loop
Einige Sprachen bieten auch Schleifenanweisungen an, mit denen Bedingungen entweder mit while
oder mit until
ausgedrückt werden können, sodass Sie den "positiveren" Weg wählen können. Diese Anweisungen sind zum Beispiel until c do ...
in Ruby , do until c ...
in VB oder repeat ... until c
in Pascal und seinen Nachkommen.
Zum Beispiel:
Until (x==1 or x==2) do
...
ist äquivalent zu:
While (x!=1 and x!=2)
...
Mach eine Funktion
Wenn Sie die nor
Syntax weiterhin bevorzugen , können Sie eine Funktion definieren, aber nur, wenn Sie nicht damit rechnen, dass eine Verknüpfung erstellt wird:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Die Funktion hat gegenüber dem Operator einen Lesbarkeitsvorteil, da der Leser sofort versteht, dass die Negation für alle Argumente gilt. In einigen Sprachen können Sie eine Funktion mit einer variablen Anzahl von Argumenten definieren.
or
und!
haben und weil Doppelnegative selten verwendet werden - die meisten Leute finden sie besonders schwer zu lesen.