Saya ingat pernah membaca di suatu tempat not
dan !
dievaluasi secara berbeda, dan saya tidak dapat menemukannya di dokumentasi. Apakah mereka identik?
ruby
boolean-logic
0112
sumber
sumber
Jawaban:
Mereka hampir identik, tetapi tidak sepenuhnya. Perbedaannya adalah bahwa
!
memiliki prioritas lebih tinggi daripadanot
, sangat suka&&
dan||
lebih diutamakan daripadaand
danor
.!
memiliki prioritas tertinggi dari semua operator, dannot
salah satu yang terendah, Anda dapat menemukan tabel lengkapnya di dokumen Ruby .Sebagai contoh, pertimbangkan:
Dalam contoh pertama,
!
memiliki prioritas tertinggi , jadi Anda mengatakannya dengan efektiffalse && false
.Pada contoh kedua,
not
memiliki prioritas lebih rendah daritrue && false
, jadi ini "mengalihkan"false
daritrue && false
ketrue
.Panduan umum tampaknya adalah yang harus Anda patuhi
!
, kecuali Anda memiliki alasan khusus untuk menggunakannyanot
.!
di Ruby berperilaku sama seperti kebanyakan bahasa lain, dan "kurang mengejutkan" daripadanot
.sumber
unless
dalam kasus itu?unless
tidak terlalu disukai di dunia ruby. Konsensus umum adalah bahwa itu hanya menghalangi ketika!
bekerja dengan baik di kebanyakan situasi. Saya yakin ada kasus di mana kecuali mungkin lebih ekspresif, tetapi saya menghindari.unless
tidak disukai. Hal terdekat yang kita miliki untuk sebuah konsensus mengatakan sebaliknya.not
hal itu. Dengan Python, saya terkadang menetapkan boolean ke variabel untuk membuat pernyataan-if lebih mudah dibaca. Itu mungkin berarti menggunakan polax = not y
, di mana y adalah sesuatu yang kompleks. Di Ruby,x = !y
berfungsi, tetapix = not y
mendapatsyntax error, unexpected tIDENTIFIER, expecting '('
. Urutan prioritas berarti ini perlu kurung di sekitar kanan tugas op bekerja:x = (not y)
.Cara mudah untuk memahami
not
operator adalah dengan melihatnot true && false
sebagai yang setara!(true && false)
sumber