Setiap kali saya menulis if-else-construct dalam bahasa apa pun, saya bertanya-tanya apa yang akan menjadi cara terbaik (dalam hal keterbacaan dan tinjauan) untuk menambahkan komentar. Terutama ketika mengomentari klausa lain, komentar selalu terasa tidak pada tempatnya bagi saya. Katakanlah kita memiliki konstruk seperti ini (contoh ditulis dalam PHP):
if ($big == true) {
bigMagic();
} else {
smallMagic()
}
Saya bisa berkomentar seperti ini:
// check, what kind of magic should happen
if ($big == true) {
// do some big magic stuff
bigMagic();
} else {
// small magic is enough
smallMagic()
}
atau
// check, what kind of magic should happen
// do some big magic stuff
if ($big == true) {
bigMagic();
}
// small magic is enough
else {
smallMagic()
}
atau
// check, what kind of magic should happen
// if: do some big magic stuff
// else: small magic is enough
if ($big == true) {
bigMagic();
} else {
smallMagic()
}
Apa contoh praktik terbaik Anda untuk mengomentari ini?
else { // for future reader: sorry, at the moment of writing this I did not have time and skills to come up with a better way to express my logic
Jawaban:
Saya lebih suka:
atau:
Agak konyol untuk menulis komentar yang menjelaskan apa yang diperiksa kondisi Anda kecuali jika kode tidak menyatakannya dengan jelas. Meski begitu, lebih baik menulis ulang kode untuk membuatnya sejelas mungkin. Hal yang sama berlaku untuk badan-badan blok bersyarat - jika Anda dapat membuat alasan untuk melakukan sesuatu yang jelas, lakukan itu alih-alih berkomentar.
Saya tidak berlangganan filosofi "tidak pernah menulis komentar", tetapi saya percaya menghindari komentar yang mengatakan apa yang seharusnya dikatakan oleh kode. Jika Anda menulis komentar seperti "periksa keajaiban apa yang harus terjadi" ketika kode itu bisa mengatakan
if ($magic == big) {...
, pembaca akan berhenti membaca komentar Anda dengan sangat cepat. Menggunakan lebih sedikit, komentar yang lebih bermakna memberi masing-masing komentar Anda nilai lebih, dan pembaca lebih cenderung memperhatikan mereka yang Anda tulis.Memilih nama yang bermakna untuk variabel dan fungsi Anda adalah penting. Nama yang dipilih dengan baik dapat menghilangkan kebutuhan akan komentar penjelasan di seluruh kode Anda. Dalam contoh Anda,
$magic
atau mungkin$kindOfMagic
sepertinya nama yang lebih baik daripada$big
karena menurut contoh Anda, itu adalah "jenis sihir" yang sedang diuji, bukan "besar" sesuatu.Katakan sebanyak mungkin dalam kode. Simpan prosa untuk kasus-kasus yang membutuhkan lebih banyak penjelasan daripada yang bisa Anda tulis dalam kode.
sumber
Coba nama variabel penjelas
Komentar dapat menjadi sangat bagus, tetapi jika memungkinkan, buat kode untuk didokumentasikan sendiri. Salah satu cara untuk melakukan ini adalah dengan nama variabel penjelas. Misalnya, daripada ini:
Saya lebih suka variabel bernama:
sumber
is_potential_elvis_impersonator
. (Is / Memiliki / etc. Awalan untuk variabel boolean ..)Hanya untuk melengkapi beberapa komentar:
BTW: Saya merekomendasikan buku ini.
sumber
Komentar tidak boleh memparafrasekan kode tetapi menjelaskan hal-hal yang tidak ada dalam kode (gambaran yang lebih besar, mengapa, mengapa alternatif tidak dipilih ...) Dan contoh komentar Anda hanya itu: parafrase kode.
Anda mungkin kadang-kadang merasa bahwa parafrase diperlukan pada awal
else
cabang, tetapi itu sering merupakan pertanda bahwathen
cabang Anda terlalu besar.sumber
Dalam contoh spesifik Anda, komentar mungkin tidak diperlukan. Seperti yang disebutkan Caleb , jika kode ditulis dengan jelas dan variabel memiliki nama semantik, jika pernyataan cenderung membutuhkan komentar.
Bandingkan cuplikan Anda dengan ini:
Dalam hal ini, Anda pasti ingin menggunakan komentar untuk menggambarkan apa yang mewakili x, func1, dan func2 (dan menampar orang yang menamakan sesuatu dengan skema itu, terutama jika itu Anda). Anda bahkan tidak tahu apakah
$x
seharusnya boolean. Tetapi ini juga merupakan kasus di mana Anda tidak perlu berkomentar, jika Anda dapat melakukan refactor dan mengganti nama.Secara umum, saya suka menulis komentar untuk blok logis yang menjelaskan hal-hal yang tidak bisa dilakukan sendiri oleh kode. Satu baris setiap ~ 10-20 baris yang menggambarkan apa yang dicapai beberapa baris berikut pada satu tingkat abstraksi yang lebih tinggi (misalnya
// Make the right amount of magic happen
untuk contoh Anda) akan membantu Anda tetap berorientasi dan memberikan wawasan pengulas baru tentang apa yang Anda lakukan dan kapan .Saya sebenarnya sering menulis ini satu-baris sebelum saya mulai menulis kode, sehingga saya tidak kehilangan jejak yang seharusnya dimiliki segmen.
Akhirnya, jika Anda benar-benar lebih suka (atau ada mandat yang mengharuskan) mengomentari klausa di blok if terlepas dari keterbacaan kode, saya sarankan:
Saya merasa ini yang terbersih, karena komentar berbaris dengan kode yang berkaitan. Sebuah komentar yang menjelaskan kode apa yang harus dilakukan sedekat mungkin dengan komentar yang digambarkannya mungkin.
sumber
Saya menjaga tanda kurung saya dan meletakkannya tepat setelah braket.
[Condition] -> [pseudo-code]
Di sisi lain, secara teknis berarti semua kondisi lain gagal, jadi saya biasanya menggunakan tanda kurung.
([Condition]) -> [pseudo-code]
Catatan: ini untuk C #.
sumber
Saya mencoba dan menggunakan komentar di dalam blok yang mengatakan apa yang dilakukan oleh blok itu (sampel pertama Anda).
Di mana ini agak rusak adalah ketika menggunakan
elseif
. Saya menggunakan Basic sehingga tidak ada blok akhir yang eksplisit dan sering harus mengomentari kondisi apa yang memeriksa pada baris di atas (dengan jeda baris tentu saja) jika terlalu panjang.sumber
Jika semua hal di atas gagal, tambahkan komentar deskriptif yang sangat kecil sebelum pernyataan if, untuk memperjelas maksud Anda. Kalau tidak, tidak perlu ada komentar sama sekali.
sumber
Dalam C ++ atau C # Saya biasanya tidak akan berkomentar kasus sederhana (ketika jelas apa yang terjadi), dan menggunakan gaya semacam ini untuk mengomentari final lain ...
sumber