Mengapa ===
lebih cepat daripada ==
di PHP?
=== vs ==
, tetapi dalam JAVASCRIPT, dapat membaca di sini: stackoverflow.com/questions/359494/…
Mengapa ===
lebih cepat daripada ==
di PHP?
=== vs ==
, tetapi dalam JAVASCRIPT, dapat membaca di sini: stackoverflow.com/questions/359494/…
Jawaban:
Karena operator persamaan ==
memaksa, atau mengkonversi, tipe data sementara untuk melihat apakah itu sama dengan operan lainnya, sedangkan ===
(operator identitas) tidak perlu melakukan konversi apa pun dan dengan demikian lebih sedikit pekerjaan yang dilakukan, yang membuatnya lebih cepat.
Pertama, === memeriksa untuk melihat apakah dua argumen adalah tipe yang sama - jadi angka 1 dan string '1' gagal pada pemeriksaan tipe sebelum perbandingan benar-benar dilakukan. Di sisi lain, == tidak memeriksa jenis terlebih dahulu dan melanjutkan dan mengonversi kedua argumen ke jenis yang sama dan kemudian melakukan perbandingan.
Karena itu, === lebih cepat dalam memeriksa kondisi gagal
==
juga memeriksa jenis terlebih dahulu untuk melihat apakah konversi jenis apa pun perlu dilakukan. Fakta yang ===
tidak melakukan konversi pada langkah berikut adalah apa yang membuatnya lebih cepat.
Ada dua hal yang perlu dipertimbangkan:
Jika jenis operan berbeda maka ==
dan ===
menghasilkan hasil yang berbeda . Dalam hal kecepatan operator tidak masalah; yang penting adalah mana yang menghasilkan hasil yang diinginkan.
Jika jenis operan sama maka Anda dapat menggunakan salah satu ==
atau ===
keduanya akan menghasilkan hasil yang sama . Dalam hal ini kecepatan kedua operator hampir identik. Ini karena tidak ada konversi tipe yang dilakukan oleh salah satu operator.
Saya membandingkan kecepatan:
$a == $b
vs. $a === $b
$a
dan $b
bilangan bulat acak [1, 100]Dan inilah hasilnya:
$a == $b $a === $b
--------- ---------
0.765770 0.762020
0.753041 0.825965
0.770631 0.783696
0.787824 0.781129
0.757506 0.796142
0.773537 0.796734
0.768171 0.767894
0.747850 0.777244
0.836462 0.826406
0.759361 0.773971
--------- ---------
0.772015 0.789120
Anda dapat melihat bahwa kecepatannya hampir identik.
Saya tidak benar-benar tahu apakah itu secara signifikan lebih cepat, tetapi === dalam sebagian besar bahasa adalah perbandingan tipe langsung, sementara == akan mencoba melakukan tipe paksaan jika perlu / mungkin untuk mendapatkan kecocokan.
Karena ===
tidak perlu memaksa operan dari jenis yang sama sebelum membandingkannya.
Saya ragu perbedaan dalam kecepatan sangat banyak. Dalam keadaan normal, Anda harus menggunakan operator mana pun yang lebih masuk akal.
Kesimpulannya === lebih cepat karena jangan mengonversi tipe data untuk melihat apakah dua variabel memiliki nilai yang sama, tetapi ketika Anda perlu melihat apakah dua variabel memiliki nilai yang sama Anda akan menggunakan == jika tidak membuat apa jenis variabel , atau === jika penting juga jenis variabel.
Lebih cepat tidak hanya diukur dalam waktu eksekusi langsung (tes kinerja langsung hampir dapat diabaikan dalam kasus ini). Yang mengatakan, saya perlu melihat tes yang melibatkan iterasi, atau rekursi, untuk benar-benar melihat apakah ada perbedaan kumulatif yang signifikan (ketika digunakan dalam konteks yang realistis). Waktu pengujian dan debug yang akan Anda hemat saat berhadapan dengan kasus tepi juga harus berarti bagi Anda
Dalam php (kode c) nilai adalah "kelas" seperti:
class value
{
$int_;
$float_;
$string_;
$array_;
$object_;
}
Ketika Anda membandingkan $a == $b
dan $a
merupakan int
jenis, akan ada sesuatu seperti:
if ($a->int_ == $b->int_ || $a->int_ == (int) $b->float_ || $a->int_ == (int) $b->string_ || ...)
tetapi string
'1'
tidak akan dilemparkan ke kode ascii 49
, itu akan menjadi1
.
Ketika Anda membandingkan $a === $b
dan $a
merupakan int
jenis, akan ada someting seperti:
if ($a->int_ == $b->int_)
Jika hasil tes sudah benar, maka itu harus menjadi masalah kompiler,
Prosesor akan melakukan apa pun yang diperintahkan untuk dilakukan pada siklus clock
Jika lebih sedikit yang harus dilakukan maka akan lebih cepat dilakukan
Tambahan:
Ah, sebenarnya jika kompiler telah membuat banyak kode mesin untuk diproses, maka jika telah menambahkan banyak hal untuk mengatasi jenis data apa yang perlu diperbandingkan, maka penghapusan satu "minor" JIKA tidak akan mengubah kecepatan banyak sama sekali.
Jika ada yang masih membaca ini maka saya tertarik dalam diskusi lebih lanjut.
Phil