Saya bertanya-tanya apakah ada alasan - atau jika itu hanya kebetulan sejarah - bahwa tidak ada !>
dan !<
operator di sebagian besar bahasa pemrograman?
a >= b
(a OR lebih besar sama dengan b) dapat ditulis sebagai !(a < b)
(a TIDAK lebih kecil b) , itu sama dengan a !< b
.
Pertanyaan ini muncul ketika saya berada di tengah pengkodean pembuat pohon ekspresi saya sendiri. Sebagian besar bahasa pemrograman memiliki a != b
operator !(a=b)
, jadi mengapa tidak !>
dan !<
?
MEMPERBARUI:
!<
(tidak lebih kecil) lebih mudah diucapkan daripada>=
(lebih besar atau sama dengan)!<
(tidak lebih kecil) lebih pendek untuk mengetik daripada>=
(lebih besar atau sama dengan)!<
(tidak lebih kecil) lebih mudah dipahami * daripada>=
(lebih besar atau sama dengan)
* karena OR
operator biner, otak Anda perlu mengoperasikan dua operan (parutan, sama dengan), sedangkan NOT
operator unary dan otak Anda perlu beroperasi hanya dengan satu operan (lebih kecil).
syntax
comparison
operators
Alex Burtsev
sumber
sumber
Jawaban:
The bahasa pemrograman D dan ekstensi DMC ke C dan C ++ melakukan mendukung operator ini (ke-14 kombinasi dari mereka), tapi menarik, D akan mencela operator ini , terutama disebabkan
a !< b
? Itua>=b || isNaN(a) || isNaN(b)
.!<
adalah tidak sama dengan>=
, karenaNaN !< NaN
adalah sementara benarNaN >= NaN
adalah palsu. IEEE 754 sulit dikuasai, jadi menggunakana !< b
hanya akan menyebabkan kebingungan atas penanganan NaN - Anda dapat mencari operator tersebut di Phobos (perpustakaan standar D), dan cukup banyak penggunaan memiliki komentar di sampingnya untuk mengingatkan pembaca yang terlibat NaN,!(a < b)
, atau jika orang suka secara eksplisita >= b || isNaN(a) || isNaN(b)
,, dan mereka lebih mudah dibaca.Selain itu, hubungan (≮, ≯, ≰, ≱) jarang terlihat dalam matematika dasar, tidak seperti
!=
(≠) atau>=
(≥), sehingga sulit untuk dipahami bagi banyak orang.Ini mungkin juga alasan mengapa sebagian besar bahasa tidak mendukungnya.
sumber
seldomly seen in basic math
- lebih seperti, tidak pernah terlihat. Kita belajar kembali dalam aljabar untuk hanya membalikkannya ke yang setara secara matematis (terutama karenaNaN
tidak muncul dalam matematika dasar)double
pengecualian untukNaN
perilaku mereka . Dalam banyak kasus, kode yang mungkin melakukan perbandingan dengan apaNaN
pun ingin memilikiNaN
perbandingan lebih besar dari segalanya, memilikinya membandingkan lebih kecil dari segalanya, atau melemparkan pengecualian pada upaya perbandingan. Mengizinkan kode untuk menentukan secara deklaratif bagaimanaNaN
seharusnya dianggap akan mengurangi kebutuhan untuk menggunakan kode imperatif untuk mencapai perilaku yang benar.<fenv.h>
fungsi sepertifesetexceptflag
.Karena tidak masuk akal memiliki dua operator berbeda dengan makna yang persis sama.
!>
) persis sama dengan "lebih rendah atau sama" (<=
)!<
) persis sama dengan "lebih besar atau sama" (>=
)Ini tidak berlaku untuk "tidak sama dengan" (
!=
), tidak ada operator dengan arti yang sama.Jadi, modifikasi Anda akan membuat bahasa lebih rumit tanpa manfaat.
sumber
x = x + 1
,x += 1
danx++
?<>
adalah operator dengan arti yang sama dengan!=
, dan Python 2 memiliki keduanya.<>
telah usang untuk waktu yang lama dan itu dihapus sejak 3,0 (dan pikiran Anda, yang terakhir 2.x rilis pernah , 2,7, dirilis pada musim panas 2010).!<
identik dengan>=
. Kemudian hanyalah cara mengetik simbol matematika yang terdefinisi dengan baik≥
. Anda benar bahwa "tidak kurang dari" digunakan dalam bahasa lisan, namun itu bahasa sehari-hari dan dapat ambigu (dapat ditafsirkan≥
atau disalahartikan sebagai>
). Di sisi lain pemrograman dan matematika menggunakan terminologi yang jelas dan tidak ambigu.Bahkan dalam logika 3-nilai, seperti ANSI SQL,
not x < y
adalah setarax >= y
, karena keduanya memberiNULL
jika salahx
atauy
yangNULL
. Namun, ada dialek SQL yang tidak sesuai dengan ANSI, yang tidak setara, dan memang ada!<
.sumber
NaN
itu salah, jadi!(2 < NaN) == true
, sementara(2 >= NaN) == false
.NaN
di sekitar s. Mereka semua berhenti bersikap normal.a !< b = not (a < b)
, kita bisa saja mengatakan (! <) = (> =).Transact-SQL memiliki !> (Tidak lebih besar dari) dan ! <(Tidak kurang dari) operator.
Jadi, selain Anda, seseorang di
SybaseMicrosoft juga berpikir itu akan menjadi ide yang bagus. Sama seperti Microsoft Bob! :)sumber
Saya pikir jawabannya sederhana saja bahwa tidak perlu
!<
operator. Seperti yang Anda tunjukkan dalam pertanyaan Anda, sudah>=
dan<=
seiring dengan kemungkinan untuk meniadakan ekspresi yang ada, jadi mengapa menambahkan operator lain?sumber
!<
tidak lebih pendek untuk mengetik daripada>=
, atau apakah saya kehilangan sesuatu?Dari RFC 1925
Menambahkan operator tambahan yang menduplikasi fungsi yang ada tidak melakukan apa pun selain menambah kompleksitas (tidak perlu) ke bahasa (dan dengan demikian tokenizer dan parser).
Pertimbangkan juga dalam bahasa-bahasa di mana operator kelebihan mungkin, Anda akan memiliki operator lain untuk kelebihan muatan. Pertimbangkan kebingungan kapan
bool operator<=
danbool operator!>
bisa mengembalikan hal-hal yang berbeda (ya, saya tahu orang sudah dapat membuat perbandingan yang tidak konsisten).Terakhir, pikirkan bahasa di mana metode atau operator didefinisikan secara berlipat ganda (Ruby - Saya melihat Anda ) dan Anda memiliki satu programmer yang menggunakan <= sementara yang lain menggunakan!> Dan Anda memiliki beberapa gaya kode untuk ekspresi yang sama.
sumber
! <sama dengan> = Sekarang mengapa kita memiliki yang kedua bukan yang pertama karena semua bahasa menerapkan operator positif terlebih dahulu dan kemudian mendekati operator negatif, Karena menerapkan> = juga mencakup! <dan <= mencakup!>. Jadi pembuat bahasa beralih ke ini dan berpikir mereka akan berlebihan dan melewatkannya.
Selalu mencoba menerapkan kasus positif terlebih dahulu kemudian pergi ke kasus negatif (:) berpikir positif, saya hanya melihat pribadi)
sumber
Alasannya adalah bahwa operator dalam bahasa pemrograman meminjam dari tradisi matematika dan dalam matematika tidak seorang pun benar-benar menggunakan "tidak lebih besar" dan "tidak lebih kecil" karena "lebih kecil atau sama" dan "lebih besar atau sama" melakukan pekerjaan yang sama baiknya.
Jadi dalam bahasa Pemrograman kita biasanya mendapatkan simbol yang terlihat seperti ≠ karena tidak sama (
!=
atau/=
, kecuali jika seseorang suka dengan<>
operator teks)dan hal-hal yang terlihat seperti ≤ dan ≥ (
<=
dan>=
)Btw, saya tidak setuju dengan pernyataan Anda bahwa BUKAN lebih mudah untuk dipahami dan alasan tentang itu ATAU. Dalam matematika, bukti yang melibatkan banyak negasi (seperti reduksi menjadi absurd) biasanya disukai jika ada alternatif yang lebih langsung tersedia. Juga, dalam kasus pemesanan, pengetahuan dasar yang kita miliki (dan yang digunakan ketika berpikir atau membuktikan sesuatu) adalah tricotomy antara <, = dan> jadi! <Pernyataan mungkin harus dikonversi ke> = jika Anda ingin melakukan apapun yang berguna dengannya.
sumber
Saya sebagian menyalahkan set instruksi perakitan. Anda sudah mendapat instruksi seperti
jge
untuk "melompat jika lebih besar atau sama". Berbeda dengan "melompat jika tidak kurang dari".Penulis kompiler mungkin telah keluar dari apa yang dihasilkan oleh para penulis majelis, yang mungkin didasarkan pada bagaimana labelnya ketika dirancang pada chip.
...mungkin.
sumber
Saya pikir saya melihat beberapa bahasa beberapa tahun yang lalu di mana, alih-alih
!=
operator (tidak sama dengan), sesuatu seperti<>
digunakan. Tidak dapat mengingat nama mereka, meskipun ...Saya pikir lebih sulit untuk dibaca
!(a < b)
ataua !< b
dibandingkana >= b
. Mungkin itulah alasan mengapa!<
tidak digunakan (memang terlihat jelek menurut saya).sumber
<>
is (was?) terutama digunakan oleh dialek BASIC, SQL, dan dialek Pascal.<>
, meskipun telah dihapus dalam 3!=
lebih umum daripada<>
, karena Anda dapat memiliki hal-hal (seperti bilangan kompleks) di mana kesetaraan didefinisikan dengan baik tetapi sebenarnya tidak ada urutan yang berguna.