Langkah dan tindakan apa yang dapat saya ambil untuk mencegah lekukan yang dalam pada kode saya?
code-quality
indentation
Tamara Wijsman
sumber
sumber
Jawaban:
Lekukan yang dalam biasanya tidak menjadi masalah jika setiap fungsi / metode dalam program Anda melakukan satu dan hanya satu hal. Kadang-kadang, mungkin perlu untuk bersarang kondisi beberapa tingkat dalam, tapi saya bisa jujur mengatakan saya hanya menulis kode indentasi dalam beberapa kali dalam 12 + tahun pengkodean.
sumber
Hal terbaik yang dapat Anda lakukan adalah mengekstrak metode:
sumber
if
kondisi- kompleks . Dibawa ke ekstrim, Anda akan berakhir dengan pseudocode yang dapat dieksekusi.else
blok yang tidak perlu .Mungkin Anda bisa mempertimbangkan klausa penjaga ?
dari pada
Melakukan
Jika Anda pernah mendapat kesempatan, saya akan merekomendasikan Anda membaca Kode Lengkap oleh Steve McConnell. Dia punya banyak nasihat bagus tentang topik ini.
http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_sim_b_6
Untuk informasi lebih lanjut tentang "klausa penjaga" lihat: https://sourcemaking.com/refactoring/replace-nested-conditional-with-guard-clauses
sumber
Balikkan milikmu
if
.Dari pada:
Saya akan menulis:
Hal yang sama berlaku untuk
if
-else
blok. Jikaelse
lebih pendek / kurang tersarang, maka kembalikan.Periksa nilai parameter di satu tempat
Periksa semua parameter untuk nilai ilegal segera setelah Anda memasukkan metode Anda, kemudian lanjutkan dengan mengetahui bahwa Anda aman. Itu membuat kode lebih mudah dibaca, tetapi juga menghemat menumpuk blok bersyarat nanti dan menyebarkan cek ini di seluruh subrutin.
sumber
If
Pada awal kode yang menghentikan aliran eksekusi karena beberapa kondisi yang tidak terpenuhi juga dikenal sebagai klausa perlindungan , seperti yang ditunjukkan oleh @JasonTuran. Dan itu tampaknya sedekat mungkin dengan memiliki nama yang berbeda.Biasanya, saya telah melihat bahwa kode indentasi dalam biasanya kode bermasalah. Jika Anda menghadapi masalah ini, maka mundur dan evaluasi apakah fungsi Anda melakukan terlalu banyak hal.
Pada saat yang sama, untuk menjawab pertanyaan Anda, jika ada kebutuhan untuk lekukan sedalam itu, saya sarankan Anda membiarkannya ada di sana. Untuk alasan sederhana bahwa dalam kode seperti itu, lekukan akan membantu karena itu kemungkinan merupakan potongan kode yang sangat panjang.
sumber
Hancurkan komponen bersarang (terutama yang berulang) keluar ke fungsi yang terpisah (ini lebih mudah jika bahasa Anda mendukung penutupan) atau ganti serangkaian loop bersarang dengan rekursi.
Juga, indentasi dua spasi, bukan empat.
sumber
Saya tidak melihat lekukan yang dalam sebagai masalah kategoris yang harus dihapus (saya juga tidak melihat refactoring sebagai jawaban sejati untuk semuanya).
Biasanya alih-alih bersarang, saya suka menulis pernyataan logis:
daripada
sumber
Saya sendiri tidak percaya, tetapi menurut Code Complete ini adalah tempat yang tepat untuk digunakan
break
(jika tim Anda ada di papan). Saya membayangkan ini lebih dapat diterima dengan programmer C ++, di manabreak
digunakan dalamswitch
pernyataan daripada dengan programmer Delphi di manabreak
hanya digunakan ketika Anda tidak merasa ingin menuliswhile
loop.sumber
Lekukan benar-benar pemikiran untuk bertarung, memang. Apa yang saya pelajari adalah membagi metode menjadi beberapa bagian terlebih dahulu, kemudian menggunakan trik aneh untuk melewati setiap bagian berikut jika salah satu bagian gagal. Berikut ini sebuah contoh:
Dari pada :
Saat ini saya menulis:
Ini terasa aneh bagi saya pada awalnya, tetapi karena saya menggunakan ini, biaya perawatan telah dibagi setengah, dan otak saya lebih dingin pada akhir hari.
Sebenarnya, keuntungan yang diperkenalkan oleh "teknik" ini adalah bahwa kompleksitas kode benar-benar terbagi karena kode kurang padat.
Saat membaca kode, Anda tidak harus mengingat apa pun tentang kondisi sebelumnya: jika Anda berada pada titik X dalam kode, langkah-langkah sebelumnya dilewati dan telah berhasil.
Keuntungan lain adalah "jalan keluar dan kondisi" dari semua yang "bersarang" yang disederhanakan.
sumber