Saya memiliki basis kode tempat pengembang memutuskan untuk menggunakan AND
dan OR
bukannya &&
dan ||
.
Saya tahu bahwa ada perbedaan dalam hal prioritas operator (lebih &&
dulu and
), tetapi dengan kerangka yang diberikan ( PrestaShop lebih tepatnya) jelas bukan alasan.
Versi mana yang Anda gunakan? Apakah and
lebih mudah dibaca daripada &&
? Atau tidak ada perbedaan?
~
operator bit-wise BUKAN dan bukan logis. ;-)Jawaban:
Jika Anda menggunakan
AND
danOR
, pada akhirnya Anda akan tersandung oleh sesuatu seperti ini:Ingin menebak apa yang
$truthiness
setara?Jika Anda mengatakan
false
... bzzzt, maaf, salah!$truthiness
di atas memiliki nilaitrue
. Mengapa?=
memiliki prioritas lebih tinggi dariand
. Penambahan tanda kurung untuk menunjukkan urutan tersirat membuat ini lebih jelas:Jika Anda menggunakan
&&
alih-alihand
dalam contoh kode pertama, itu akan berfungsi seperti yang diharapkan dan menjadifalse
.Sebagaimana dibahas dalam komentar di bawah, ini juga berfungsi untuk mendapatkan nilai yang benar, karena tanda kurung memiliki prioritas lebih tinggi daripada
=
:sumber
and
or
sekali untuk semua. Saya melihat terlalu banyak orang berpikir mereka adalah hal yang persis sama dan jawaban di sini adalah lebih banyak kesaksian.$foo and bar()
, yang merupakan jalan pintas yang bagus untuk pernyataan if. Jika perilaku tak terduga (dari dokumentasi yang buruk, atau tidak membacanya) adalah alasan untuk tidak menggunakan sesuatu yang kita tidak akan berbicara tentang menggunakan PHP sama sekali.Bergantung pada bagaimana itu digunakan, itu mungkin perlu dan bahkan berguna. http://php.net/manual/en/language.operators.logical.php
Tetapi dalam kebanyakan kasus sepertinya lebih dari rasa pengembang, seperti setiap kejadian ini yang saya lihat dalam kerangka CodeIgniter seperti @Sarfraz telah disebutkan.
sumber
if ($f = false or true) $f = true;
- hasilnya akan$f
menjadi benar pada akhirnya, karena ekspresi dievaluasi sebagai benar secara keseluruhan.$f
akan diberikan false - tetapi kondisi bernilai true, maka$f
ditimpa. Jika kondisi dievaluasi salah,$f
tidak akan pernah ditimpa dengan cara lain.and
lebih&&
, di manaand
karya-karya seperti yang diharapkan hanya beberapa situasi dan&&
bekerja seperti yang diharapkan di semua situasi.Demi keamanan, saya selalu mengurung perbandingan saya dan menghapusnya. Dengan begitu, saya tidak harus bergantung pada prioritas operator:
sumber
Precedence berbeda antara && dan dan (&& memiliki prioritas lebih tinggi dari dan), sesuatu yang menyebabkan kebingungan ketika dikombinasikan dengan operator ternary. Misalnya,
akan mengembalikan string yang sementara
akan mengembalikan boolean .
sumber
Karena
and
memiliki prioritas lebih rendah daripada=
Anda dapat menggunakannya dalam penetapan kondisi:sumber
"&&" dan "dan" keduanya adalah operasi DAN logis dan mereka melakukan hal yang sama, tetapi diutamakan operator berbeda.
Diutamakan (prioritas) dari operator menentukan bagaimana "erat" itu mengikat dua ekspresi bersama. Misalnya, dalam ekspresi 1 + 5 * 3, jawabannya adalah 16 dan bukan 18 karena operator perkalian ("*") memiliki prioritas lebih tinggi daripada operator penambahan ("+").
Menggabungkannya bersama dalam satu operasi, bisa memberi Anda hasil yang tidak terduga dalam beberapa kasus saya sarankan selalu menggunakan &&, tapi itu pilihan Anda.
Di sisi lain "&" adalah operasi DAN bitwise . Ini digunakan untuk evaluasi dan manipulasi bit tertentu dalam nilai integer.
Contoh jika Anda melakukannya (14 & 7) hasilnya adalah 6.
sumber
Jika standar pengkodean untuk basis kode tertentu saya menulis kode untuk menentukan operator mana yang harus digunakan, saya pasti akan menggunakannya. Jika tidak, dan kode menentukan yang harus digunakan (tidak sering, dapat dengan mudah dikerjakan) maka saya akan menggunakannya. Kalau tidak, mungkin
&&
.Apakah lebih mudah dibaca oleh Anda . Jawabannya adalah ya dan tidak tergantung pada banyak faktor termasuk kode di sekitar operator dan memang orang yang membacanya!
Iya. Lihat operator logis untuk
||
dan operator bitwise untuk~
.sumber
Saya kira ini masalah selera, meskipun (keliru) mencampurkannya dapat menyebabkan beberapa perilaku yang tidak diinginkan:
Karenanya, menggunakan && dan || lebih aman karena mereka memiliki prioritas tertinggi. Dalam hal keterbacaan, saya akan mengatakan operator ini cukup universal.
PEMBARUAN : Tentang komentar yang mengatakan bahwa kedua operasi mengembalikan false ... well, sebenarnya kode di atas tidak mengembalikan apa pun, saya minta maaf atas ambiguitasnya. Untuk mengklarifikasi: perilaku dalam kasus kedua tergantung pada bagaimana hasil operasi digunakan. Amati bagaimana prioritas operator mulai berlaku di sini:
Alasan mengapa
$a === true
adalah karena operator penugasan lebih diutamakan daripada operator logis, seperti yang sudah dijelaskan dengan sangat baik dalam jawaban lain.sumber
Berikut ini contoh contohnya:
keluaran:
Saya akan mengatakan kesalahan ketik semacam ini jauh lebih mungkin menyebabkan masalah berbahaya (dalam banyak cara yang sama seperti
=
vs==
) dan jauh lebih kecil kemungkinannya untuk diperhatikan daripadaadn
/ro
kesalahan ketik yang akan ditandai sebagai kesalahan sintaksis. Saya juga menemukan dan / atau lebih mudah dibaca. FWIW, sebagian besar kerangka kerja PHP yang menyatakan preferensi (kebanyakan tidak) menentukan dan / atau. Saya juga tidak pernah menemukan kasus nyata yang tidak dibuat-buat di mana itu akan menjadi masalah.sumber
Contoh bagus lainnya menggunakan
if
pernyataan tanpa=
operasi penugasan.dan
karena
AND
memiliki prioritas yang lebih rendah dan dengan demikian||
prioritas yang lebih tinggi.Ini berbeda dalam kasus
true, false, false
dantrue, true, false
. Lihat https://ideone.com/lsqovs untuk contoh terperinci.sumber