Jawaban:
Mereka hampir identik, tetapi tidak sepenuhnya. Perbedaannya adalah bahwa !
memiliki prioritas lebih tinggi daripada not
, sangat suka &&
dan ||
lebih diutamakan daripada and
dan or
.
!
memiliki prioritas tertinggi dari semua operator, dan not
salah satu yang terendah, Anda dapat menemukan tabel lengkapnya di dokumen Ruby .
Sebagai contoh, pertimbangkan:
!true && false
=> false
not true && false
=> true
Dalam contoh pertama, !
memiliki prioritas tertinggi , jadi Anda mengatakannya dengan efektif false && false
.
Pada contoh kedua, not
memiliki prioritas lebih rendah dari true && false
, jadi ini "mengalihkan" false
dari true && false
ke true
.
Panduan umum tampaknya adalah yang harus Anda patuhi !
, kecuali Anda memiliki alasan khusus untuk menggunakannya not
. !
di Ruby berperilaku sama seperti kebanyakan bahasa lain, dan "kurang mengejutkan" daripada not
.
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 pola x = not y
, di mana y adalah sesuatu yang kompleks. Di Ruby, x = !y
berfungsi, tetapi x = not y
mendapat syntax 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 melihat not true && false
sebagai yang setara!(true && false)