Ini adalah salah satu hal yang paling saya benci ketika saya melihatnya di kode orang lain. Saya tahu apa artinya dan mengapa beberapa orang melakukannya dengan cara ini ("bagaimana jika saya secara tidak sengaja meletakkan '=' sebagai gantinya?"). Bagi saya itu sangat seperti ketika seorang anak menuruni tangga menghitung langkah dengan keras.
Bagaimanapun, inilah argumen saya yang menentangnya:
- Itu mengganggu aliran alami membaca kode program. Kita, manusia, mengatakan "jika nilai adalah nol" dan bukan "jika nol adalah nilai".
- Kompiler modern memperingatkan Anda ketika Anda memiliki tugas dalam kondisi Anda, atau sebenarnya jika kondisi Anda hanya terdiri dari tugas itu, yang, ya, tetap terlihat mencurigakan
- Anda tidak boleh lupa untuk melipatgandakan '=' ketika Anda membandingkan nilai jika Anda seorang programmer. Anda mungkin lupa untuk menempatkan "!" saat menguji ketidaksetaraan.
coding-style
Mojuba
sumber
sumber
0 == value
tetapi tidak ingat untuk menulis==
?? Maksud saya, astaga, jika Anda memikirkannya, mengapa tidak menulisnya dengan benar?Jawaban:
Ah, ya, "Yoda conditionals" ("Jika nilainya nol, jalankan kode ini Anda harus!"). Saya selalu menunjukkan siapa pun yang mengklaim mereka "lebih baik" pada alat-alat seperti serat (1). Masalah khusus ini telah dipecahkan sejak akhir 70-an. Sebagian besar bahasa modern bahkan tidak akan mengkompilasi ekspresi seperti
if(x = 10)
, karena mereka menolak untuk memaksa hasil penugasan ke boolean.Seperti yang orang lain katakan, itu jelas bukan masalah, tetapi itu sedikit memprovokasi disonansi kognitif.
sumber
if(!value)
.if (0 == x)
?Itu menjengkelkan karena memberlakukan pajak mental yang kecil, tetapi nyata.
Orang membaca dari kiri ke kanan dalam hampir semua bahasa pemrograman (dan sebagian besar bahasa alami).
Jika saya melihat
123 == x
, cara saya menguraikannya secara mental adalah:123
- terus? info tidak lengkap.==
- Nah, 123 adalah 123, mengapa mengujinya ...x
- ok, jadi itu yang kami khawatirkan. Hanya sekarang saya memiliki konteksnya.123
dan mengapa x dibandingkan dengan itu.Ketika saya melihat
x == 123
parsing mental adalah:x
- Memberikan konteks, saya tahu tentang apa kondisinya. Saya dapat memilih untuk mengabaikan sisanya. Berdasarkan aliran sebelumnya saya punya ide bagus mengapa dan apa yang akan datang (dan terkejut jika itu berbeda).==
- Kupikir juga begitu.123
- Ya.Gangguannya kecil (dalam contoh sederhana), tetapi saya selalu menyadarinya.
Menempatkan nilai pertama mungkin merupakan ide yang baik jika Anda ingin menarik perhatian padanya, misalnya
if (LAUNCH_NUKES == cmd)
. Biasanya ini bukan niatnya.sumber
=
atau==
sebelum123
ataux
, dan akhirnya tidak repot-repot menerjemahkan kode ke bahasa Inggris di kepala saya.Berbahaya? Tidak. Ini bekerja dengan baik.
Praktek yang Buruk? Luar biasa, terbaik. Ini pemrograman defensif yang sederhana.
Layak kehilangan tidur? Tidak
sumber
Ini pada dasarnya adalah flaimbait.
Tidak, itu tidak lebih berbahaya daripada kebaikan. Sederhana.
Lebih banyak kata?
Argumen kompiler? Erm, ish, mungkin - jangan terlalu percaya pada penyusun untuk menyelamatkan Anda dari diri sendiri.
"Anda tidak boleh lupa" - juga duh - tidak ada tentu saja Anda tidak harus sementara aku lelah, aku sudah coding sepanjang hari saya harus menggunakan dua bahasa yang berbeda dan kadang-kadang, hanya kadang-kadang, menjadi manusia aku make kesalahan.
Inti dari perilaku semacam ini adalah sikapnya yang defensif, tidak ada di sana karena Anda berharap untuk membuat kesalahan lebih daripada Anda memiliki asuransi karena Anda berharap untuk crash ... tetapi jika Anda melakukannya dengan baik untuk dilindungi.
Susah dibaca? Anda mengeluh bahwa seorang programmer yang baik seharusnya memiliki == bawaan (yang membuat semua jenis asumsi yang buruk) tetapi programmer yang sama tidak dapat membaca 0 == nilai ??
Tidak ada salahnya, memiliki manfaat potensial, pertanyaan konyol, biarkan orang lain melakukannya jika mereka mau dan terus maju.
sumber
Saya tidak akan menyebutnya berbahaya, tetapi itu menjengkelkan. Jadi tidak, saya tidak akan mengatakan itu.
sumber
Saya tidak pernah merasakan keseluruhan 'bagaimana jika saya lupa a =?' pernah benar-benar memegang banyak berat badan. Ya, Anda mungkin membuat kesalahan ketik, tetapi kita semua membuat kesalahan ketik, tampaknya konyol untuk mengubah seluruh gaya pengkodean Anda karena Anda takut membuat kesalahan. Mengapa tidak membuat semua variabel Anda & fungsi semuanya huruf kecil tanpa tanda baca, karena Anda mungkin lupa untuk memanfaatkan sesuatu atau melupakan garis bawah suatu hari?
sumber
Beberapa orang menggunakannya untuk memperjelas apa yang dilakukan oleh kondisi. Misalnya:
Cara 1:
Cara 2:
Beberapa orang merasa bahwa contoh kedua lebih ringkas, atau argumen pembalik menggambarkan titik ujian (bersyarat) sebelum ujian itu sendiri.
Sebenarnya, saya juga tidak keberatan. Saya punya hewan peliharaan saya kesal tentang gaya dan yang terbesar adalah inkonsistensi. Jadi, lakukan dengan cara yang sama, secara konsisten dan saya tidak keberatan membaca kode Anda.
Mencampurnya sampai ke titik di mana sepertinya enam orang yang berbeda dengan gaya khas mereka mengerjakannya sekaligus, saya menjadi sedikit kesal.
sumber
Bagi saya, itu adalah pengondisian sederhana. Sebagai seseorang yang belajar (di 90-an) C dan C ++, saya menjadi terbiasa dan masih menggunakannya, meskipun alasannya dikurangi.
Setelah Anda "dikondisikan" untuk melihat sisi kiri untuk "konstan", itu menjadi sifat kedua.
Saya juga hanya menggunakannya untuk kesetaraan (atau negated equivalence), bukan untuk lebih besar / kurang dari.
Saya setuju sepenuhnya dengan jawaban Wonko.
sumber
Satu kasus di mana saya merasa terbantu adalah di mana bagian variabel jika cukup panjang dan melihat nilai-nilai membuat kode lebih mudah dibaca. Bahasa namespace bertitik memiliki contoh terbaik ini.
Misalnya sesuatu yang saya kerjakan dengan sistem masuk tunggal memiliki situasi di mana Anda dapat memiliki dua sesi bersamaan jika jenis kesalahan tertentu terjadi dan dipulihkan dengan cara tertentu, jadi saya harus menambahkan pawang untuk itu yang ada di dalam jika itu tampak sesuatu seperti ini:
if (2 <= application.httpcontext.current.session["thenameofmysessiontoken"].items.count())
Harus diakui dalam contoh ini ada cara lain untuk melakukan ini, tetapi ini akan menjadi kasus di mana versi nomor-pertama berpotensi lebih mudah dibaca.
sumber
Namun kesalahan terjadi. Dan kadang-kadang Anda menginginkan penugasan dalam operator loop di mana Anda mungkin memeriksa kesetaraan, atau setidaknya itu adalah praktik standar untuk menggunakannya.
Saya terus dengan itu. Saran yang saya ikuti (mungkin dari Kode Lengkap) adalah untuk menjaga apa yang seharusnya menjadi nilai yang lebih rendah di sebelah kiri dalam perbandingan. Saya mendiskusikan ini dengan seorang rekan sebelumnya dan dia pikir itu agak gila tapi saya sudah terbiasa dengannya.
Jadi saya akan mengatakan:
Tetapi saya juga akan mengatakan:
Kesetaraan saya akan cenderung untuk memeriksa dengan variabel di sebelah kiri, itu hanya lebih mudah dibaca.
sumber
if(y > x)
semua waktu. Kecuali jikay
sebuah konstanta.