Mana yang lebih baik / lebih umum diterima?
Ini:
if(condition)
{
statement;
}
Atau:
if(condition)
statement;
Saya cenderung lebih suka yang pertama, karena saya pikir itu membuatnya lebih mudah untuk mengetahui apa yang sebenarnya termasuk dalam blok if, itu menyelamatkan orang lain dari menambahkan kawat gigi nanti (atau membuat bug dengan melupakannya), dan itu membuat semua pernyataan if Anda seragam bukan beberapa dengan kawat gigi dan beberapa tanpa. Namun, yang kedua masih benar secara sintaksis dan jelas lebih ringkas. Saya ingin tahu melihat mana yang lebih disukai oleh orang lain.
coding-style
Zannjaminderson
sumber
sumber
statement if condition;
?Jawaban:
Yang pertama lebih baik karena yang kedua rawan kesalahan. Misalnya, katakanlah Anda sementara mengomentari kode untuk men-debug sesuatu:
Atau menambahkan kode dengan tergesa-gesa:
Ini jelas buruk. Di sisi lain, yang pertama kadang terasa terlalu bertele-tele. Karena itu, saya lebih suka meletakkan semuanya pada satu baris jika itu cukup pendek dan sederhana:
Ini mengurangi kebisingan sintaksis sementara membuat konstruksi terlihat seperti itu melakukan apa yang sebenarnya dilakukannya, membuatnya lebih rentan kesalahan. Asalkan sintaks ini hanya digunakan untuk kondisi dan pernyataan yang sangat sederhana, singkat, saya merasa itu dapat dibaca dengan sempurna.
sumber
Saya selalu menggunakan tanda kurung hanya untuk aman.
Tidak masalah ketika Anda menulisnya, tetapi Anda tahu seseorang akan datang di masa depan dan memasukkan pernyataan lain tanpa menempatkan tanda kurung di sekitarnya.
sumber
Saya lebih suka versi tanpa kawat gigi jika memungkinkan.
Penjelasan berikut ini agak panjang. Tolong bersamaku. Saya akan memberikan alasan kuat bagi saya untuk memilih gaya ini. Saya juga akan menjelaskan mengapa saya berpikir bahwa argumen bantahan yang biasa tidak berlaku.
(Dekat-) jalur kosong adalah pemborosan
Alasan untuk ini adalah bahwa kurung kurawal memerlukan baris kode tambahan - dan demikian pula kurung kurawal, tergantung gaya. 1
Apakah ini masalah besar? Secara dangkal, tidak. Lagipula, kebanyakan orang juga meletakkan baris kosong dalam kode mereka untuk memisahkan blok yang sedikit independen secara logis, yang sangat meningkatkan keterbacaan.
Namun, saya benci membuang ruang vertikal. Monitor modern sebenarnya memiliki ruang horizontal yang luas. Tetapi ruang vertikal masih sangat, sangat terbatas (kecuali jika Anda menggunakan monitor dengan posisi tegak, yang tidak biasa). Ruang vertikal terbatas ini merupakan masalah: diakui secara luas bahwa metode individual harus sesingkat mungkin, dan bahwa kawat gigi yang sesuai (atau pembatas blok lainnya) tidak boleh lebih dari perbedaan ketinggian layar sehingga Anda dapat melihat seluruh blok tanpa bergulir.
Ini adalah masalah mendasar : sekali Anda tidak bisa melihat seluruh blok lagi di layar, semakin sulit untuk dipahami.
Sebagai akibatnya, saya benci garis kosong yang berlebihan. Di mana satu baris kosong sangat penting untuk membatasi blok independen (lihat saja tampilan visual teks ini), baris kosong berturut - turut adalah gaya yang sangat buruk dalam buku saya (dan menurut pengalaman saya, itu biasanya merupakan pertanda programmer pemula).
Demikian juga, garis yang hanya menahan penyangga, dan yang bisa dihemat, seharusnya. Blok pernyataan tunggal yang dibatasi oleh kawat gigi membuang satu hingga dua baris. Dengan hanya 50 garis ish per tinggi layar, ini terlihat.
Menghilangkan kawat gigi mungkin tidak ada salahnya
Hanya ada satu argumen yang menentang penghapusan kawat gigi: bahwa seseorang nantinya akan menambahkan pernyataan lain ke blok yang dimaksud dan akan lupa untuk menambahkan kawat gigi, sehingga secara tidak sengaja mengubah semantik kode.
Ini memang akan menjadi masalah besar.
Tapi menurut pengalaman saya, tidak. Saya seorang programmer yang ceroboh; namun, dalam dekade pengalaman pemrograman saya, saya dapat dengan jujur mengatakan bahwa saya tidak pernah lupa untuk menambahkan kawat gigi ketika menambahkan pernyataan tambahan ke blok tunggal.
Saya bahkan merasa tidak masuk akal bahwa ini harus menjadi kesalahan umum: blok adalah bagian mendasar dari pemrograman. Resolusi dan pelingkupan tingkat blok adalah proses mental yang mendarah daging secara otomatis bagi para programmer. Otak hanya melakukannya (jika tidak, penalaran tentang pemrograman akan jauh lebih sulit). Tidak ada upaya mental tambahan yang diperlukan untuk mengingat menempatkan kawat gigi: pemrogram juga ingat untuk indentasi pernyataan yang baru ditambahkan dengan benar, setelah semua; jadi programmer telah secara mental memproses blok yang terlibat.
Sekarang, saya tidak mengatakan bahwa menghilangkan kawat gigi tidak menyebabkan kesalahan. Apa yang saya katakan adalah bahwa kita tidak memiliki bukti satu atau lain cara. Kami hanya tidak tahu apakah itu menyebabkan kerusakan.
Jadi sampai seseorang dapat menunjukkan kepada saya data keras, yang dikumpulkan dari eksperimen ilmiah, menunjukkan bahwa ini memang masalah dalam praktiknya, teori ini tetap merupakan " cerita biasa-biasa saja ": hipotesis yang sangat meyakinkan yang belum pernah diuji, dan bahwa harus tidak digunakan sebagai argumen.
1 Masalah ini kadang-kadang diselesaikan dengan meletakkan segala sesuatu - termasuk kawat gigi - pada baris yang sama:
Namun, saya yakin aman untuk mengatakan bahwa kebanyakan orang membenci ini. Lebih jauh lagi, itu akan memiliki masalah yang sama dengan varian tanpa kawat gigi jadi itu yang terburuk dari kedua dunia.
sumber
Saya pergi dengan yang kedua. Itu lebih ringkas dan kurang bertele-tele.
Saya mencoba untuk tidak menulis ke penyebut umum terendah, jadi saya berharap bahwa pengembang lain tahu bagaimana menulis salah satu struktur aliran kontrol yang paling umum dalam pemrograman saat ini.
sumber
Saya akan menggunakan yang berikut (konsensus di sini):
Juga mungkin:
Tidak begitu baik, terutama dalam bahasa C / C ++ - seperti:
(Tidak ada pilihan di sini di Python ;-)
Di Perl , Anda akan menggunakan:
atau
(Ini bukan kodesemu ;-)
sumber
if
klausa, saya tidak menggunakan kawat gigi. Untukif
pernyataan lain (atau pernyataan apa pun yang menggunakan banyak baris), saya selalu menggunakan kawat gigi. Khususnya, jika adaelse
klausa, setiap kasing memiliki kawat gigi.<statement> if <condition>
atau gaya blok multilineif <condition>
/<do something>
/end
(ruby menghindari kawat gigi, jadi di sini kurung pembuka disiratkan olehif
dan kurung ujung diganti dengan literalend
). Itu bahkan tidak menawarkan pernyataan multiline-tapi-benar-hanya-satu-baris jika aneh.Saya menggunakan metode kawat gigi - untuk semua alasan di atas ditambah satu lagi.
Penggabungan kode. Sudah diketahui terjadi pada proyek yang saya kerjakan pada pernyataan tunggal jika telah rusak oleh penggabungan otomatis. Yang menakutkan adalah lekukan terlihat benar meskipun kodenya salah, jadi bug jenis ini sulit dikenali.
Jadi saya pergi dengan kawat gigi - di jalur mereka sendiri. Lebih mudah menemukan level-level seperti itu. Ya, itu memboroskan real estat layar vertikal dan itu adalah kerugian asli. Namun pada keseimbangan, saya pikir itu sepadan.
sumber
Tidak ada kawat gigi Jika beberapa programmer lain menambahkan pernyataan kedua ke kode saya, itu bukan kesalahan saya daripada jika saya membiarkan seseorang mengendarai mobil saya dan mereka melewati tebing.
sumber
Kami telah memiliki argumen ini lebih dari sekali di sini, dan konsensus keseluruhan adalah untuk selalu menggunakan kawat gigi. Alasan utamanya adalah tentang keterbacaan / pemeliharaan.
Jika Anda perlu menambahkan kode ke
if
blok, Anda tidak perlu mengingat / mencari kawat gigi. Ketika programmer masa depan membaca kode, kawat gigi selalu jelas.Di sisi positifnya, ReSharper akan secara otomatis menambahkan kawat gigi untuk pemrogram malas di Visual Studio, dan saya berasumsi ada tambahan untuk IDE lain yang juga akan melakukannya.
sumber
Saya menggunakan sintaks pertama, hampir tanpa kecuali. Karena itu tidak bisa disalahartikan .
"Jangan membuatku berpikir" tidak hanya berlaku untuk antarmuka pengguna, kalian semua ;-)
sumber
Saya pribadi lebih suka yang kedua. Yang pertama terlihat jelek, canggung, dan menyia-nyiakan ruang horisontal. Masalah utama dengan yang kedua adalah makro dan orang-orang memodifikasi kode Anda di kemudian hari salah.
Untuk ini, saya katakan "jangan gunakan makro". Saya juga mengatakan, "indentasikan kode sialan Anda dengan benar". Mempertimbangkan bagaimana setiap editor teks / IDE yang digunakan untuk pemrograman melakukan lekukan secara otomatis, ini seharusnya tidak terlalu sulit untuk dilakukan. Saat menulis kode di Emacs, saya akan menggunakan indentasi otomatis untuk mengidentifikasi jika saya menulis sesuatu yang salah pada baris sebelumnya. Kapan saja Emacs mulai mengacaukan lekukan, saya biasanya tahu saya telah melakukan sesuatu yang salah.
Dalam praktiknya, saya akhirnya mengikuti konvensi pengkodean apa pun yang telah ditetapkan sebelumnya. Tapi ini mengganggu saya (dan membuat saya jauh lebih bahagia ketika saya kode dalam Python dan seluruh bencana braket ini hilang):
Kemudian
Meskipun jujur, dua pernyataan dalam pernyataan if mengganggu saya jauh lebih dari satu pernyataan. Sebagian besar karena itu tanda kurung diperlukan dan itu masih terlihat lucu dengan hanya dua pernyataan dalam pernyataan if.
sumber
Saya menggunakan versi dua baris tanpa kawat gigi (bentuk ke-2), tetapi tidak untuk menghemat ruang.
Saya menggunakan formulir itu karena saya merasa lebih mudah dibaca, lebih menarik secara visual, dan lebih mudah untuk diketik. Saya hanya menggunakan formulir itu jika persyaratan itu dipenuhi; yaitu
if
kondisi harus cocok dengan satu baris, dan pernyataan yang sesuai harus cocok dengan baris berikut. Jika bukan itu masalahnya, maka saya akan menggunakan kawat gigi untuk meningkatkan keterbacaan.Jika saya menggunakan formulir ini, saya memastikan bahwa ada baris kosong (atau baris yang hanya berisi tanda kurung) sebelum dan sesudah
if
pernyataan (atau di atas komentar, jika ada). Meskipun ini bukan aturan yang secara sadar saya ikuti, saya perhatikan sekarang setelah membaca pertanyaan ini.Menghemat ruang layar bukan prioritas bagi saya. Jika saya membutuhkan lebih banyak ruang, saya akan menggunakan monitor yang lebih besar. Layar saya sudah cukup besar bagi saya untuk membaca apa pun yang saya butuhkan untuk memfokuskan perhatian saya. Tidak mungkin saya perlu fokus pada begitu banyak baris kode pada satu waktu sehingga mereka mengambil seluruh layar saya. Jika ada begitu banyak bersarang terjadi dengan sepotong kode yang saya tidak dapat memahaminya tanpa melihatnya lebih banyak pada satu waktu, maka saya harus mempertimbangkan apakah logika dapat lebih baik diwakili oleh refactoring.
Di bawah ini adalah beberapa contoh yang menunjukkan bagaimana saya menggunakan bentuk
if
pernyataan ini.sumber
Kawat gigi. Selalu. Saya agak menyukai mereka, karena memberikan kode konsistensi. Dan juga seperti @dsimcha menulis - lebih sedikit kemungkinan untuk kesalahan dalam menambahkan baris kode tambahan.
"Kejelekan" kawat gigi di sekitar satu baris kode kurang berbahaya daripada pekerjaan tambahan yang mungkin dalam kasus tersebut dengan debugging dan / atau menambahkan kode.
sumber
Secara pribadi saya pergi dengan kurung.
Mengapa?
Nah jika ada yang datang dan perlu menambahkan kode ke pernyataan if 100% jelas di mana ruang lingkupnya.
Itu membuat format
if
pernyataan konsisten, tidak peduli berapa banyak pernyataan yang ada di blok.Namun, jika gaya proyek tidak berjalan, patuhi itu.
sumber
Saya hampir selalu menggunakan tanda kurung hanya untuk berada di sisi yang aman. Namun, kadang-kadang jika isi blok benar-benar pendek saya akan meninggalkannya dan menjadikannya satu-baris seperti:
sumber
Saya lebih suka kawat gigi untuk konsistensi, tetapi tidak membuang terlalu banyak ruang putih (jadi kode yang lebih mudah diformat dalam bidang pandang saya yang terbatas). Jadi saya menulis ini untuk baris yang cukup pendek:
sumber
Saya biasanya menggunakan kawat gigi, tetapi ada beberapa kasus di mana saya tidak.
Bagi saya, konyol jika menambahkannya di sana. Jika seseorang menambahkan pernyataan setelah itu
return
, kami memiliki masalah yang lebih besar daripada masalah pelingkupan.sumber
return (obj != null) ? obj : "Error";
Object returnObj = defaultObj; /* Three else-if's to change it to obj1/2/3 */ return returnObj;
.Jika IDE memiliki pemformatan kode yang tersedia, saya tidak menggunakan kawat gigi.
Di sisi lain, di mana kode dapat diedit di editor lain yang tidak mendukung pemformatan otomatis, berbahaya untuk tidak memasang kawat gigi seperti yang disebutkan dalam posting lain. Tetapi meskipun demikian saya memilih untuk tidak menggunakan kawat gigi, dan itu tidak menjadi masalah bagi saya.
sumber