Tidak, tidak ada nor
operator dalam bahasa pemrograman arus utama tingkat tinggi.
Mengapa
Terutama karena sulit dibaca:
- itu memerlukan kombinasi mental dari beberapa operator (" dan tidak ", atau dalam gaya yang lebih sastra: " lanjut negatif ", " masing-masing tidak benar " )
- itu menyiratkan implisit
not
pada operan pertama, tetapi pembaca hanya memahami ini setelahnya
- itu berbeda dari bahasa manusia, yang menggunakan negasi eksplisit pada operan pertama, seperti " bukan x atau y ", " atau x atau y ". Jadi pembaca mungkin bingung
(x nor y)
dengan (x and not y)
alih - alih((not x) and (not y))
- beberapa pembaca bingung dengan
or
semantik semu yang tidak berlaku
Tapi itu sangat umum di perangkat keras ...
nor
adalah gerbang perangkat keras dasar yang dapat digunakan untuk membuat semua gerbang logis lainnya. Jadi orang dapat berargumen bahwa semua operator logika lainnya adalah kombinasi dan nor
merupakan operator logis elementer yang paling sederhana.
Namun, apa yang benar untuk perangkat keras belum tentu benar bagi manusia. Dan meskipun popularitasnya di tingkat perangkat keras, beberapa CPU arus utama bahkan tidak menawarkan NOR
dalam set instruksi assembler mereka (misalnya x86 ).
Alternatif
Masalah keterbacaan. Dan terkadang itu bisa diperbaiki dengan cara lain.
Penggunaan operator yang ada
Sebagai contoh:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Pemesanan kondisi
if x==1 or x==2
action A
else
action B
dari pada
if x!=1 and x!=2
action B
else
action A
Gunakan sampai loop
Beberapa bahasa juga menawarkan instruksi loop yang memungkinkan untuk mengekspresikan kondisi dengan while
atau dengan until
, memungkinkan Anda memilih cara yang lebih "positif". Instruksi-instruksi ini misalnya until c do ...
di ruby , do until c ...
di vb , atau repeat ... until c
di pascal dan keturunannya.
Sebagai contoh:
Until (x==1 or x==2) do
...
setara dengan:
While (x!=1 and x!=2)
...
Buat suatu fungsi
Sekarang jika Anda masih lebih menyukai nor
sintaks, Anda bisa mendefinisikan suatu fungsi, tetapi hanya jika Anda tidak mengharapkan jalan pintas terjadi:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Ada keuntungan keterbacaan fungsi atas operator, karena pembaca segera memahami bahwa negasi berlaku untuk semua argumen. Dalam beberapa bahasa Anda dapat mendefinisikan suatu fungsi dengan sejumlah variabel argumen.
or
dan!
, dan karena negatif ganda jarang digunakan - kebanyakan orang merasa sangat sulit untuk dibaca.