Apakah komentar dianggap sebagai bentuk dokumentasi?


11

Ketika saya menulis skrip kecil untuk diri saya sendiri, saya menumpuk kode saya tinggi dengan komentar (kadang-kadang saya berkomentar lebih dari saya kode). Banyak orang yang saya ajak bicara mengatakan bahwa saya harus mendokumentasikan skrip-skrip ini, meskipun bersifat pribadi, sehingga jika saya pernah menjualnya, saya akan siap. Tetapi bukankah komentar merupakan bentuk dokumentasi?

Bukankah ini:

$foo = "bar"; # this is a comment
print $foo; # this prints "bar"

dianggap dokumentasi, terutama jika pengembang menggunakan kode saya? Atau apakah dokumentasi dianggap berada di luar kode itu sendiri?


11
Jika Anda menggunakan sistem pembuatan dokumen seperti JavaDocs atau Doxygen, komentar secara harfiah adalah dokumentasi.
Gort the Robot

5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Dokumentasikan kode Anda sesuai keinginan Anda. Biarkan pelanggan (jika ada) membayar Anda untuk menulis dokumentasi untuk kepuasan mereka. Jangan khawatir tentang apa yang dikatakan banyak orang (kecuali mereka membayar Anda).
emory

1
Dari 2 komentar Anda yang ke-2 tidak berguna, mengapa tidak ganti $ foo dengan bilah. Jika ini tidak benar maka komentarnya salah. Komentar pertama salah. Itu adalah tugas.
ctrl-alt-delor

2
Saat Anda ingin menambahkan komentar, ubah kode Anda menjadi sangat jelas sehingga tidak perlu komentar. Semuanya dokumentasi, kode dokumentasi, Komentar biasanya tidak punya informasi [tambahan], atau salah. Dokumentasikan maksudnya apa (kontrak kode dapat membantu ini), dan alasannya. Simpan dokumentasi dekat dengan kode, gunakan komentar. Dokumentasi atas Dokumen: Komentar atas Dokumen, Hapus Kode atas Komentar.
ctrl-alt-delor

2
Apakah YANGNI "kamu tidak akan membutuhkannya"
Chris S

Jawaban:


27

Komentar pasti dokumentasi. Untuk sebagian besar proyek, komentar (sayangnya) merupakan bentuk utama dokumentasi proyek. Untuk alasan ini, sangat penting untuk memperbaikinya. Anda perlu memastikan bahwa dokumentasi ini tetap akurat meskipun ada perubahan kode. Ini adalah masalah umum dengan komentar. Pengembang sering "menghilangkan" mereka ketika mereka bekerja dengan kode yang sudah dikenal, sehingga mereka lupa untuk memperbarui komentar untuk mencerminkan kode. Ini dapat membuat komentar yang kedaluwarsa dan menyesatkan.

Banyak orang menyarankan untuk membuat kode sendiri. Ini berarti bahwa alih-alih komentar, Anda merestrukturisasi kode Anda untuk menghapus kebutuhan mereka. Ini dapat menghilangkan sebagian besar komentar "apa" dan "bagaimana", tetapi tidak benar-benar membantu dengan komentar "mengapa". Meskipun ini mungkin bekerja secara efektif untuk menghilangkan sebagian besar komentar, masih ada banyak waktu di mana menulis komentar adalah cara paling sederhana dan paling efisien untuk mendokumentasikan sepotong kode.


3
"Untuk sebagian besar proyek, komentar adalah bentuk utama dari dokumentasi proyek." - tergoda untuk downvote untuk ini, tetapi sayangnya itu harus diakui sebagai pernyataan yang benar. Namun saya harap bukan maksud Anda untuk mengklaim bahwa beginilah seharusnya.
Edward Strange

2
Saya benar-benar tidak setuju dengan ini, karena satu-satunya dokumentasi terpercaya yang Anda miliki adalah kode sumber itu sendiri. Komentar dan "dokumentasi" harus dipelihara dengan kode, yang jarang terjadi. Jadi satu-satunya sumber dokumentasi yang dapat diandalkan adalah kode Anda!
martiert

3
@martiert saya dulu merasakan hal yang sama, tetapi saya menemukan ini tidak benar-benar bekerja dengan baik dalam praktek. Semua komentar "mengapa" itu jauh lebih jelas sebagai komentar daripada mencoba mengekstrak pengetahuan "mengapa" dari kode. Tentu saja kode dokumentasi diri dapat (dan harus) digunakan untuk menghapus sebagian besar komentar, tetapi terkadang komentar adalah cara paling sederhana, paling jelas, dan paling efisien waktu untuk mendokumentasikan sesuatu.
Oleksi

3
@martiert Masalah dengan kode self-documenting adalah tidak mengizinkan referensi ke dokumentasi di tempat lain. Beberapa komentar terbaik dalam kode yang pernah saya lihat adalah referensi ke makalah akademis yang menjelaskan rincian algoritma yang digunakan atau pemilihan konstanta sihir. Tidak ada jumlah mendokumentasikan diri akan membantu menghindari fakta bahwa beberapa, kritis, dokumentasi jelas tidak jelas. "Mengapa" sering termasuk dalam kategori ini, dan kadang-kadang "bagaimana" juga.
Donal Fellows

3
Perhatikan juga bahwa komentar, dalam banyak bahasa, digunakan untuk menghasilkan dokumentasi yang sebenarnya ... jadi sering kali satu dan sama. Lihat MSDN sebagai contoh.
Steven Evers

12

Mereka adalah bentuk dokumentasi, tetapi ingat bahwa dokumentasi ada di mata yang melihatnya ....

  • Bagi sebagian orang, kode dokumentasi diri sudah cukup. Tapi itu mengasumsikan tingkat detail teknis sebagai pelanggan. Kita harus hati-hati berpikir bahwa ini sudah cukup, karena ego kita dapat mengatakan kepada kita "Jelas apa yang dilakukan kode ini" tetapi waktu dapat membuktikan sebaliknya. Ini juga mengasumsikan Anda tahu terlebih dahulu keterampilan pembaca.

  • Bagi mereka yang melihat kode sumber tetapi dengan keahlian teknis yang kurang, komentar bisa saja ok. Tapi itu mengasumsikan seseorang melihat kode sumbernya.

  • Jika Anda teknis, tetapi kurang waktu untuk membaca semua kode sumber, manual teknis bisa menjadi apa yang diperlukan.

  • Jika pengguna tidak memiliki keterampilan teknis, tetapi hanya perlu tahu apa yang terjadi, dokumentasi pengguna adalah yang diperlukan.

Jadi pertanyaan sebenarnya adalah siapa pelanggan Anda? Jika ya, maka kode atau komentar yang mendokumentasikan diri sendiri sudah cukup. Jika itu untuk orang lain, Anda mungkin ingin memperluas cara Anda mendokumentasikan.


17
Kode dokumentasi diri adalah bohong.
yannis

1
@YannisRizos Lebih seperti tujuan yang tidak dapat diraih daripada kebohongan langsung.
Flame Ptharien

2
@YannisRizos: Anda mungkin benar, tetapi kode yang membutuhkan banyak komentar hampir selalu merupakan kode yang sangat buruk dan bisa hampir pernah ditulis dengan cara yang membutuhkan lebih sedikit komentar.
Doc Brown

9
@DocBrown Tergantung. Saya telah melihat orang-orang mendokumentasikan loop dan saya telah melihat orang-orang mengklaim bahwa 100 lok logika bisnis mendokumentasikan diri. Faktanya adalah bahwa komentar yang berlebihan tidak dapat menyakiti (kecuali jika usang / salah), dan jika saya harus memilih antara komentar berlebihan dan kode dokumentasi diri, saya akan selalu memilih yang pertama. Tentu saja, saya lebih suka komentar yang seimbang dan to the point, seperti yang dijelaskan Oleksi .
yannis

1
@MathAttack Sebagian besar IDE yang layak dapat menyembunyikan / melipat komentar. Tapi ya, kadang-kadang mereka hanya menghalangi.
yannis

3

Ya, komentar adalah bentuk dokumentasi. Apakah itu dokumentasi yang berguna atau tidak bagi seseorang yang harus memelihara atau memperbarui kode Anda adalah pertanyaan terbuka.

Saya tahu Anda bermaksud sebagai contoh sekali pakai, tetapi hal-hal seperti

print $foo; # this prints "bar"

tidak berguna; itu hanya menambah kekacauan visual. Jangan mendokumentasikan yang sudah jelas.

Memblokir komentar di bagian atas definisi metode atau fungsi yang menggambarkan fungsi atau tujuan metode (dalam istilah tingkat tinggi ), input, output, nilai pengembalian (jika ada), pengecualian (jika ada), prasyarat, dan kondisi akhir berguna, tetapi hanya sampai pada taraf mereka memberi tahu seseorang bagaimana fungsi atau metode itu seharusnya digunakan. Mereka tidak menjelaskan mengapa fungsi itu ada.

Jika orang lain perlu mempertahankan kode Anda, maka Anda perlu mendokumentasikan persyaratan dan desain di suatu tempat, dan itu biasanya tidak dilakukan dalam kode sumber itu sendiri.


3

Saya mendapati pendekatan Bob Martin terhadap hal ini, dari Clean Code, biasanya menyelesaikan masalah apakah Anda merasa Anda terlalu banyak berkomentar atau kurang berkomentar dan meninggalkan dokumentasi:

Kami adalah penulis. Dan satu hal tentang penulis adalah mereka memiliki pembaca. Memang, penulis bertanggung jawab untuk berkomunikasi dengan baik dengan pembaca mereka. Lain kali Anda menulis sebaris kode, ingat Anda adalah seorang penulis, menulis untuk pembaca yang akan menilai upaya Anda.

... rasio waktu yang dihabiskan membaca dan menulis lebih dari 10: 1. Kami terus membaca kode lama sebagai bagian dari upaya untuk menulis kode baru.

Jadi dengan kata lain, apakah kode Anda cukup jelas tanpa dokumentasi? Tidak ada aturan yang ditetapkan untuk itu (kecuali jika Anda bekerja untuk orang seperti Microsoft yang dokumentasinya dapat diakses publik), sebagian besar adalah untuk membantu pembaca kode di masa mendatang yang sering kali adalah Anda.


2

Dokumentasi harus mendokumentasikan Mengapa bukan Bagaimana . The Bagaimana harus jelas dalam kode, yaitu kecuali itu adalah beberapa trik optimasi misterius atau teknik bahasa tertentu lainnya yang tidak umum yang terjadi.

The Mengapa mungkin tidak harus dalam kode, harus berada di tempat lain seperti jaminan produk, yang terikat untuk melakukan komentar dengan id cerita yang dapat dicari dalam log perubahan atau nama cabang.


1
Hal-hal yang benar-benar rumit harus dalam makalah akademis (atau, kadang-kadang, paten).
Donal Fellows

2

Komentar adalah bentuk dokumentasi. Bentuk yang lebih rendah, dan yang menunjukkan Anda telah menemukan area kode Anda yang dapat difaktorkan dengan lebih baik.

Sepertinya Anda berkomentar secara kompulsif. Memiliki pilihan lain mungkin merupakan hal yang baik. Saya dapat memikirkan tiga bentuk dokumentasi unggul:

1) Faktorkan kode Anda lebih baik. Alih-alih menambahkan komentar, ekstrak metode atau fungsi yang namanya adalah teks dari komentar yang akan Anda tulis. Jadi kodenya mengatakan apa yang akan dikatakan komentar Anda.

2) Tes. Ini adalah bentuk dokumentasi yang biasanya saya cari. Tes unit dan tes penerimaan adalah dokumentasi langsung, dan dapat dibaca dengan mudah jika banyak metode bermakna digunakan untuk menyatakan maksud, seperti pada poin 1.

3) Untuk skrip, opsi --help. Di sinilah Anda bisa menjadi gila pada doc. Tetap pada contoh, mengantisipasi apa yang dibutuhkan pengguna.

Singkatnya, jika Anda cenderung untuk tetap memberikan komentar, periksa apakah ada cara untuk berkomunikasi dengan pembaca dengan menyusun kode dengan lebih baik. Atau ada tes yang mengomunikasikan mengapa kode itu ada? Jika Anda masih merasa ingin berkomentar, akui kekalahan, dan lakukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.