Nein, es gibt keinen norOperator 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
notfü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
orSemantik, die nicht zutrifft
Aber es ist so üblich in Hardware ...
norist 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 norder 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 NORAssembler-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 whileoder mit untilausgedrü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 cin 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 norSyntax 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.
orund!haben und weil Doppelnegative selten verwendet werden - die meisten Leute finden sie besonders schwer zu lesen.