Kode yang didokumentasikan sendiri vs Javadocs?

18

Baru-baru ini saya telah mengerjakan refactoring bagian-bagian dari basis kode yang saat ini saya tangani - tidak hanya untuk memahaminya dengan lebih baik, tetapi juga untuk membuatnya lebih mudah bagi orang lain yang mengerjakan kode.

Saya cenderung bersandar pada sisi berpikir bahwa mendokumentasikan kode sendiri itu bagus . Saya hanya berpikir itu lebih bersih dan jika kode berbicara sendiri, yah ... Itu bagus .

Di sisi lain kami memiliki dokumentasi seperti javadocs. Saya juga suka ini, tetapi ada risiko tertentu bahwa komentar di sini sudah ketinggalan zaman (dan tentu saja komentar pada umumnya). Namun, jika mereka up-to-date, mereka bisa sangat berguna mengatakan, memahami algoritma yang kompleks.

Apa praktik terbaik untuk ini? Di mana Anda menggambar garis antara kode yang mendokumentasikan diri dan javadocs?

Andreas Johansson
sumber

Jawaban:

24

Kode dokumentasi diri (dan komentar dalam kode) dan komentar Javadoc memiliki dua audiens target yang sangat berbeda.

Kode dan komentar yang tersisa di file kode adalah untuk pengembang. Anda ingin mengatasi masalah mereka di sini - membuatnya mudah untuk memahami apa kode itu dan mengapa kode itu seperti itu. Penggunaan nama variabel yang sesuai, metode, kelas, dan sebagainya (kode dokumentasi diri) ditambah dengan komentar mencapai ini.

Komentar Javadoc biasanya untuk pengguna API. Ini juga pengembang, tetapi mereka tidak peduli dengan struktur internal sistem, hanya kelas, metode, input, dan output sistem. Kode tersebut terkandung dalam kotak hitam. Komentar-komentar ini harus digunakan untuk menjelaskan bagaimana melakukan tugas-tugas tertentu, apa hasil operasi yang diharapkan, ketika pengecualian dilemparkan, dan apa nilai input artinya. Dengan serangkaian dokumentasi yang dibuat oleh Javadoc, saya seharusnya dapat sepenuhnya memahami cara menggunakan antarmuka Anda tanpa pernah melihat satu pun baris kode Anda.

Thomas Owens
sumber
+1, itu panggilan yang bagus. Saya pikir pegangan utama saya dengan ini adalah bahwa saya tidak melihatnya sebagai dua audiens target yang berbeda, tetapi Anda benar.
Andreas Johansson
1
@Andiaz - Saya merasa berguna untuk membedakan antara tepi luar sistem (seperti API layanan) dan kelas di dalamnya. Saya sering bekerja pada proyek-proyek di mana konvensi adalah untuk javadoc semua metode publik, tetapi saya lebih berhati-hati pada kelas luar untuk memberikan beberapa indikasi tentang bagaimana kelas (dan sistem) harus digunakan. Di kelas batin saya menganggap pembaca memiliki lebih banyak pengetahuan domain dan meminimalkan javadoc, membiarkan nama metode berbicara lebih banyak untuk diri mereka sendiri.
Steve Jackson
3
@SteveJackson Saya setuju, bagaimanapun, saya telah menemukan diri saya menggunakan lebih banyak Javadocs (bahkan pada anggota pribadi) sejak IDE (setidaknya Eclipse dan NetBeans) menampilkan komentar Javadoc di tooltips penyelesaian kode. Tentu saja, mereka tidak sebersih antarmuka publik, mereka memberikan tips / catatan kepada pengembang lain.
Thomas Owens
24

Kode mengatakan bagaimana . Komentar mengatakan mengapa , dan mungkin bahkan mengapa tidak .

Adalah tugas Anda untuk menyediakan bagi pembaca dan pengelola kode Anda di masa mendatang. Masukkan semua yang Anda bisa dalam kode, dan sisanya di komentar.

Perhatikan bahwa hal-hal yang paling sulit ditangkap adalah keputusan desain - ingat juga itu.


sumber
2
+1: Ini bukan "baik-atau" dalam arti eksklusif. Keduanya dalam arti inklusif.
S.Lott
Saya pasti setuju dengan ini. Apakah ada hal lain yang akan Anda pertimbangkan ketika datang ke javadocs khususnya? Seperti, saya dapat membayangkan bahwa menggambarkan apa yang dilakukan suatu metode mungkin berguna untuk API misalnya.
Andreas Johansson
Javadocs sangat mudah diakses dari sebagian besar IDE. Buatlah mudah untuk menavigasi ke informasi lebih lanjut.
+1: Komentar terbaik yang saya lihat mencakup referensi ke makalah tempat algoritma yang digunakan dibahas secara mendalam; itu bukan sesuatu yang dapat didokumentasikan sendiri dalam nama variabel / metode, dan tidak selalu termasuk dalam dokumen-komentar karena algoritma adalah bagian dari implementasi dan bukan antarmuka .
Donal Fellows
4

Menggunakan Javadocs tidak membuat perbedaan nyata - karena dokumen yang dihasilkan berisi nama fungsi Anda bersama dengan teks dari komentar, sama sekali tidak ada alasan mengapa Anda harus mengulangi apa pun di komentar yang jelas dari nama fungsi itu sendiri.

Jika, di sisi lain, Anda memiliki fungsi di mana seseorang harus melihat implementasi terlebih dahulu untuk memahami apa yang baik untuk (sehingga tidak membuat informasi ini tersedia untuk Javadocs), maka kode tersebut adalah IMHO tidak mendokumentasikan sendiri, tidak peduli seberapa jelas implementasinya.

Doc Brown
sumber
3
+1 favorit saya adalah ketika standar kode perusahaan memerlukan metode yang terdokumentasi, tetapi semua orang menggunakan generator yang hanya mengulangi apa yang sudah dikatakan kode. Membosankan, dan tidak berguna.
Kryptic
1

Saya pikir dengan javadocs, semuanya sama dengan dokumentasi apa pun - aturan utamanya adalah:

ikuti audiensi

Apakah banyak orang membaca javadocs Anda? Jika ya, masuk akal untuk menginvestasikan upaya untuk memperbaikinya.

Apakah pembaca Anda cenderung tidak membaca kode demi mempelajari javadocs? Jika ya, masuk akal dua kali lebih banyak untuk menghabiskan upaya menulisnya dengan baik.

  • Ini persis dengan dokumentasi JDK . Tebak Sun / Oracle menghabiskan banyak upaya untuk hal ini dan mereka tampaknya memiliki pengembalian yang bagus dalam dokumen API yang banyak digunakan oleh komunitas.

Sekarang, apakah ini kasus Anda? Jika tidak, pikirkan dua kali apakah upaya yang diinvestasikan ke javadocs dibenarkan.

Seperti yang sudah ditunjukkan di atas, dengarkan audiens untuk mencari tahu jalannya.

  • Jika Anda mendengar keluhan aktif tentang dokumentasi yang tidak mencukupi, pertimbangkan untuk berinvestasi untuk memperbaikinya.
     
    Jika, di sisi lain, yang Anda dengar adalah pengembang yang mengeluh tentang aturan braindead yang memaksa mereka membuang waktu untuk mengetik yang tidak berguna, maka kemungkinan besar upaya javadocs Anda seperti berinvestasi dalam hipotek subprime . Pikirkan investasi yang lebih baik sebagai gantinya.
agas
sumber
0

Saya hanya ingin mengomentari kekhawatiran bahwa komentar Javadoc mungkin sudah usang. Meskipun @JonathanMerlet benar dalam mengatakan bahwa Javadoc harus stabil, Anda juga dapat membantu dengan meninjau Javadoc dan komentar serta kode selama peer review. Apakah komentar sesuai dengan apa yang dilakukan kode? Jika tidak, yang salah, dan bersikeras pengembang memperbaikinya. Cobalah mendorong pengembang lain untuk melakukan hal yang sama. Ini membantu tidak hanya memperbarui dokumentasi eksternal (komentar Javadoc), tetapi juga komentar kode biasa. Ini membantu pengembang yang datang setelah refactoring Anda memahami kode lebih cepat dan mudah, dan membuatnya lebih sederhana di masa mendatang.

Eric Hydrick
sumber
-1

Saya pikir javadocs sesuai untuk bagian-bagian yang harus tetap stabil (API) sehingga risiko komentar yang keluar dari tanggal diminimalkan, sedangkan kode dokumentasi diri sangat bagus untuk apa yang sering mengalami perubahan (implementasi). Tentu saja, API dapat berubah selama proyek berlangsung, tetapi memiliki tajuk tepat sebelum deklarasi, menjaga keduanya agar tetap sinkron tidak sulit (dibandingkan dengan komentar pada beberapa baris yang menjelaskan beberapa baris kode)

Jonathan Merlet
sumber