Nie, nie ma noroperatora w żadnym głównym języku programowania wysokiego poziomu.
Dlaczego ?
Głównie dlatego, że trudno jest odczytać:
- wymaga mentalnej kombinacji kilku operatorów („ i nie ” lub w bardziej literackim stylu: „ dalsze negatywne ”, „ każdy nieprawdziwy ” )
- implikuje domyślnie
notpierwszy operand, ale czytelnik rozumie to dopiero później
- różni się od języków ludzkich, które używają wyraźnej negacji pierwszego argumentu, takiego jak „ ani x ani y ”, „ ani x ani y ”. Czytelnik może więc pomylić
(x nor y)z (x and not y)zamiast((not x) and (not y))
- niektórzy czytelnicy są myleni z oczywistym
orsemantycznym, który nie ma zastosowania
Ale to tak powszechne w sprzęcie ...
norjest elementarną bramą sprzętową, której można użyć do wykonania wszystkich innych bram logicznych. Można więc argumentować, że wszystkie pozostałe operatory logiczne są kombinacjami i norsą najprostszym elementarnym operatorem logicznym.
Jednak to, co jest prawdziwe dla sprzętu, niekoniecznie musi być prawdziwe dla ludzi. I pomimo popularności na poziomie sprzętowym, niektóre procesory głównego nurtu nawet nie oferują NORw zestawie instrukcji asemblera (np. X86 ).
Alternatywy
Czytelność ma znaczenie. A czasem można to poprawić za pomocą innych środków.
Wykorzystanie istniejących operatorów
Na przykład:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Porządkowanie warunków
if x==1 or x==2
action A
else
action B
zamiast
if x!=1 and x!=2
action B
else
action A
Użyj pętli do
Niektóre języki oferują również instrukcje pętli, które pozwalają wyrazić warunki za pomocą whilelub za pomocą until, co pozwala wybrać bardziej „pozytywny” sposób. Instrukcje te są na przykład until c do ...w rubinie , do until c ...w czasowniku lub repeat ... until cw Pascalu i jego potomkach.
Na przykład:
Until (x==1 or x==2) do
...
jest równa:
While (x!=1 and x!=2)
...
Zrób funkcję
Teraz, jeśli nadal wolisz norskładnię, możesz zdefiniować funkcję, ale tylko jeśli nie spodziewasz się skrótu:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Funkcja ma przewagę pod względem czytelności nad operatorem, ponieważ czytelnik natychmiast rozumie, że negacja dotyczy wszystkich argumentów. W niektórych językach możesz zdefiniować funkcję o zmiennej liczbie argumentów.
ori!ponieważ podwójne negatywy są rzadko używane - większość ludzi uważa je za szczególnie trudne do odczytania.