Apakah else while
tanpa kawat gigi intervensi dianggap pemeliharaan yang "aman"?
Menulis if-else
kode tanpa kawat gigi seperti di bawah ini ...
if (blah)
foo();
else
bar();
... membawa risiko karena kurangnya kawat gigi membuatnya sangat mudah untuk mengubah makna kode secara tidak sengaja.
Namun, apakah di bawah ini juga berisiko?
if (blah)
{
...
}
else while (!bloop())
{
bar();
}
Atau apakah else while
tanpa kawat gigi intervensi dianggap "aman"?
else while
terlihat menjijikkan. Saya akan menggunakanelse { while (condition) { ... } }
.if
hanya dievaluasi sekali, tetapiwhile
menunjukkan satu loop, jadi menghubungkan keduanya memberi saya perasaan tidak berdasar bahwa ituif
adalah bagian dari loop ... entah bagaimana ...else
klausa Anda ingin melakukanwhile
dan melakukan sesuatu yang lebih? Silakan gunakan kawat gigi saja.Jawaban:
Itu mengingatkan saya pada kode ini:
Setiap kali Anda menggabungkan dua jenis blok, melupakan kawat gigi dan tidak meningkatkan indentasi, Anda membuat kode yang sangat sulit untuk dipahami dan dipelihara.
sumber
Mungkin itu karena saya mempelajari perdagangan saya (jalan kembali ketika) menggunakan metode Diagram Struktur Entitas Jackson , tetapi saya berlangganan dengan pandangan bahwa satu-satunya istilah yang tidak di-brace yang benar setelah suatu
if
atau yangelse
berikutnya adalahif
(yaitu mengizinkanelse if
tangga)Hal lain (tidak ada permainan kata-kata) meninggalkan potensi untuk kesalahpahaman dan / atau masalah pemeliharaan. Itulah aspek utama dari ide OP menjadi "tidak aman".
Saya juga akan sangat cerdik tentang memasukkan
while()
pada baris yang sama denganelse
- apakah menguatkan atau tidak. Itu tidak tepat bagi saya ... tidak ada topeng lekukan tambahan bahwa itu adalahelse
klausa. Dan kurangnya kejelasan membuat kesalahpahaman (lihat di atas).Jadi dalam contoh ini saya akan sangat menyarankan / merekomendasikan (dan bersikeras, di tim saya) tentang:
Tentu saja, saya juga berharap untuk melihat komentar yang cocok juga.
- Edit -
Baru-baru ini Apple menderita kerentanan SSL, yang disebabkan oleh perbaikan pemeliharaan yang buruk - yang menambahkan baris kedua ke saluran tunggal yang tidak di-resleting. Jadi mari kita taruh ide bahwa satu baris yang tidak diikat tidak apa-apa?
sumber
else while
saya mungkin tidak akan memperhatikan ada loop dalam skimming cepat kode, terutama jika kondisi yang saya cari puas dengan if.else while
tanpa kawat gigi yang mengintervensi dianggap "aman" ?Saya selalu diajarkan untuk menjaga segala sesuatunya dalam kawat gigi, menjorok dan berkomentar. Saya percaya akan lebih mudah untuk membaca dan menemukan kesalahan. Secara pribadi saya merasa modularitas adalah kunci sehingga saya akan selalu menulis kode seperti ini:
sumber
Saya akan mengekstrak metode dan membuatnya
Lihat pendekatan "ekstrak metode" yang dijelaskan di situs Katalog Refactoring :
sumber
Saya akan menganggapnya sebagai kebiasaan buruk pengkodean. Terkadang ini berfungsi dengan baik dan Anda tidak akan memiliki masalah dalam menyusun dan menjalankan kode. Di lain waktu itu dapat menyebabkan bug serius dan Anda akan menghabiskan waktu berjam-jam untuk memperbaiki bug itu.
Itu selalu disarankan untuk memodulasi kode Anda. Jika Anda harus meletakkan loop sementara di bagian lain letakkan di blok sehingga orang lain, ketika bekerja pada kode Anda dapat dengan mudah memahami logika.
Ini adalah praktik yang baik untuk meletakkan kode di blok. Itu membuatnya lebih sederhana dan lebih mudah untuk memahami dan men-debug juga.
sumber
Mungkin baik-baik saja jika tetap sederhana seperti itu meskipun secara pribadi saya tidak menyukainya dan preferensi saya adalah menggunakan kawat gigi bahkan untuk blok kode if / else yang paling sederhana. Ini lebih rapi untuk saya.
Namun, di mana ini menjadi berantakan adalah ketika Anda telah bersarang jika / lain loop beberapa dengan kawat gigi beberapa tanpa A While loop di tengah semua spageti itu! Saya telah bekerja dengan kode yang buruk dan itu mimpi buruk untuk debug dan mengerti. Ini mengikuti dari titik pertama itu baik-baik saja ketika itu tetap sederhana dan Anda senang dengan itu, tetapi kemudian programmer lain datang dan menambahkan sesuatu ke dalamnya, mungkin jika ada di dalam while loop. Jika itu ditulis bersih di tempat pertama maka ada sedikit kemungkinan hal ini terjadi.
Intinya adalah membuat hal-hal menjadi jelas sehingga programmer lain dapat melihat secara sekilas apa yang benar dan salah. Tulis kode sehingga polanya terlihat benar dan tidak bergetar.
Sisi lain dari hal ini adalah mungkin saya bisa melihat beberapa orang mengklaim bahwa dalam kasus tertentu ini bisa dibaca dengan baik. Jika saya punya sumber daya, saya perlu melakukan pemrosesan ini sementara saya menunggu sesuatu melakukan ini. Meski begitu bagi saya masih ada perbedaan dalam bersarang loop sementara di dalam blok lain.
sumber
Yah, meskipun semua orang berdebat tentang menggunakan kawat gigi dan tampaknya mencintai mereka, saya sebenarnya lebih suka sebaliknya. Saya hanya menggunakan kawat gigi ketika saya harus melakukannya karena saya merasa lebih mudah dibaca dan ringkas tanpa.
... "
else while(...)
" Saya benar-benar menemukan ini sangat bisa dibaca! Bahkan berbunyi seperti bahasa Inggris! Tapi saya kira semua orang akan menganggapnya aneh karena jarang dikatakan.Pada akhirnya, kita semua cenderung menjadikannya anti-idiot dengan kawat gigi ... karena, yah, Anda tahu.
sumber
else while(...) bar();
menjadi sesuatu sepertielse while(...) foobar(); bar();
:)Saya selalu memasang kawat gigi, hanya karena Anda dapat menambahkan baris lain saat terburu-buru, indentasi, lupakan kawat gigi dan garuk-garuk kepala Anda apa yang terjadi. Saya menjaga braket pembuka pada baris yang sama, tetapi tidak masalah. Saya berdua lebih baik memilikinya.
sumber
Apa yang salah dengan kawat gigi sehingga banyak orang berusaha untuk tidak menulisnya?
Masalah apa sebenarnya yang
else while
dipecahkan?Kawat gigi murah dan bagus, dan mereka membuat niat kode menjadi jelas dan jelas sebagai lawan pintar dan cerdas.
Mengutip Filsafat Unix:
Aturan Kejelasan: Kejelasan lebih baik dari pada kepintaran.
sumber
Tidak ada yang salah dengan itu
sama seperti tidak ada yang salah dengan itu
dalam keadaan yang tepat (keadaan Anda mungkin berbeda-beda, tetapi gaya tertentu itu paling baik digunakan ketika Anda memiliki banyak kode berulang - maka tampilan setiap baris lebih penting daripada lekukan gaya)
Tetapi jika Anda memilih satu cara, pertahankan - konsistensi adalah raja. Jadi contoh kedua Anda sangat buruk, karena ekspresi if memiliki tanda kurung untuk pernyataannya, pernyataan sementara harus di dalam tanda kurung untuk klausa lain, bukan di luarnya.
selain itu, saya telah melihat kode ini sebelumnya:
dan itu ditulis oleh standar pengkodean nazi sendiri (yang bersikeras tanda kurung untuk semuanya).
sumber
IDE modern dapat dengan mudah dikonfigurasikan untuk memformat ulang (termasuk menghapus atau menambahkan kawat gigi yang tidak perlu) dan / atau mengaktifkan kembali kode untuk menyimpan file. Jadi contoh Anda akan secara otomatis terlihat seperti misalnya
Lekukan selalu membuat sarang mudah terlihat, bahkan tanpa kawat gigi yang tidak perlu. Jadi, jika Anda berhasil menerapkan pengaturan IDE seperti itu, saya tidak melihat risiko.
Secara pribadi, saya menemukan kode yang menghilangkan kawat gigi dan linebreak jauh lebih mudah dibaca karena menghindari kekacauan:
Tapi tentu saja, banyak pengembang sangat senang berdebat tentang hal-hal seperti itu selamanya dan sehari.
sumber