Konvensi apa yang Anda gunakan untuk pengambil dan penyetel komentar? Ini adalah sesuatu yang saya pikirkan selama beberapa waktu, misalnya:
/**
* (1a) what do you put here?
* @param salary (1b) what do you put here?
*/
public void setSalary(float salary);
/*
* (2a) what do you put here?
* @return (2b)
*/
public float getSalary();
Saya selalu menemukan saya cukup banyak menulis hal yang persis sama untuk 1a / b dan 2a / b, seperti 1a) Menetapkan gaji karyawan, 1b) gaji karyawan. Sepertinya terlalu berlebihan. Sekarang saya dapat melihat sesuatu yang lebih kompleks Anda mungkin menulis lebih banyak di bagian (a), untuk memberikan konteks, tetapi untuk mayoritas pengambil / penyetel di luar sana kata-katanya hampir persis sama.
Saya hanya ingin tahu apakah, untuk pengambil / penyetel sederhana tidak masalah untuk hanya mengisi bagian (a) ATAU bagian (b).
Bagaimana menurut anda?
Jawaban:
Saya biasanya hanya mengisi bagian param untuk setter, dan bagian @return untuk getter:
Dengan begitu, alat pemeriksaan javadoc (seperti peringatan Eclipse) akan keluar dengan bersih, dan tidak ada duplikasi.
sumber
Sama sekali tidak ada gunanya - Anda lebih baik tanpa omong kosong semacam ini yang mengacaukan kode Anda:
Sangat berguna, jika diperlukan:
Terutama penjelasan tentang arti sebenarnya dari properti dapat menjadi sangat penting dalam model domain. Setiap kali saya melihat kacang penuh dengan properti dengan nama tidak jelas yang hanya dipahami oleh bankir investasi, ahli biokimia atau fisikawan kuantum, dan komentar menjelaskan bahwa metode setGobbledygook () "menetapkan gobbledygook.", Saya ingin mencekik seseorang.
sumber
Umumnya tidak ada, jika saya bisa membantu. Pemberi dan penyetel harus cukup jelas.
Saya tahu itu terdengar seperti non-jawaban, tapi saya mencoba menggunakan waktu saya untuk berkomentar hal-hal yang membutuhkan penjelasan.
sumber
Saya akan mengatakan hanya khawatir tentang memberi komentar getter dan setter jika mereka memiliki semacam efek samping, atau memerlukan semacam prasyarat di luar inisialisasi (yaitu: mendapatkan akan menghapus item dari struktur data, atau untuk mengatur sesuatu yang Anda butuhkan untuk menempatkan x dan y di tempat pertama). Kalau tidak, komentar di sini cukup berlebihan.
Sunting: Selain itu, jika Anda menemukan banyak efek samping yang terlibat dalam pengambil / penyetel, Anda mungkin ingin mengubah pengambil / penyetel agar memiliki nama metode yang berbeda (yaitu: push dan pop untuk tumpukan) [Terima kasih untuk komentar di bawah]
sumber
Tanyakan pada diri Anda apa yang Anda ingin orang lihat ketika komentar dilihat sebagai JavaDocs (dari browser). Banyak orang mengatakan bahwa dokumentasi tidak perlu karena sudah jelas. Ini tidak akan berlaku jika bidang tersebut bersifat pribadi (kecuali Anda secara eksplisit mengaktifkan JavaDocs untuk bidang pribadi).
Dalam kasus Anda:
Tidak jelas berapa gaji yang dinyatakan. Apakah sen, dolar, pound, RMB?
Saat mendokumentasikan setter / getter, saya ingin memisahkan apa dari encoding. Contoh:
Baris pertama mengatakan itu mengembalikan ketinggian. Parameter kembali mendokumentasikan bahwa tinggi dalam meter.
sumber
public void setSalary(float aud)
(atau lebih realistis,public void setSalary(BigDecimal aud)
). Lebih baik lagi, properti itu harus berjenisabstract class CurrencyAmount
, yang pada gilirannya memiliki propertijava.util.Currency currency
danjava.math.BigDecimal amount
. Sebagian besar pengembang yang pernah bekerja dengan saya sangat malas dengan JavaDoc, tetapi menerapkan API seperti ini membuat masalah ini berkurang.Mengapa mereka tidak menyertakan tag referensi untuk memungkinkan Anda mengomentari nilai bidang dan referensi dari pengambil dan penyetel.
Sehingga dokumentasi berlaku untuk pengambil dan penyetel serta bidang (jika javadocs pribadi diaktifkan itu).
sumber
Jenis boilerplate ini dapat dihindari dengan menggunakan Project Lombok . Cukup dokumentasikan variabel bidang, meskipun itu
private
, dan biarkan anotasi Lombok menghasilkan pengambil dan penyetel yang terdokumentasi dengan benar.Bagi saya, manfaat ini saja sepadan dengan biayanya .
sumber
Saya benar-benar kecewa dengan jawaban yang pada dasarnya mengatakan bahwa mendokumentasikan komprehensif adalah buang-buang waktu. Bagaimana klien API Anda seharusnya mengetahui bahwa metode yang dipanggil
setX
adalah penyetel properti JavaBean standar kecuali Anda mengatakannya dengan jelas dalam dokumentasi ?Tanpa dokumentasi, penelepon tidak akan tahu sama sekali jika metode tersebut memiliki efek samping, selain dengan menyilangkan jari mereka tentang konvensi nyata yang diikuti.
Saya yakin saya bukan satu-satunya di sini yang mengalami kemalangan karena mengetahui cara sulit yang disebut metode
setX
melakukan lebih dari sekadar menetapkan properti.sumber
setX
memiliki efek samping selain yang diharapkan, saya memang dapat menyatakan dengan keyakinan bahwa ini bukanlah dunia yang sempurna.Jika tidak ada operasi khusus dalam pengambil / penyetel, saya biasanya menulis:
Dengan Javadoc (dengan opsi pribadi):
dan / atau
Dengan Doxygen (dengan opsi ekstrak pribadi):
sumber
{@see #salary}
tidak valid dalam dokumentasi yang dibuat.Mengomentari pengakses, terutama jika mereka tidak melakukan operasi apa pun di mana pun, tidak diperlukan dan hanya membuang-buang ujung jari.
Jika seseorang yang membaca kode Anda tidak dapat memahami bahwa
person.getFirstName()
mengembalikan nama depan seseorang, Anda harus mencoba sekuat tenaga untuk membuatnya dipecat. Jika ia melakukan sihir database, melempar beberapa dadu, memanggil Sekretaris Nama Depan untuk mendapatkan nama depan, Aman untuk menganggap ini operasi non-sepele, dan mendokumentasikannya dengan baik.Sebaliknya, jika Anda
person.getFirstName()
tidak mengembalikan nama depan seseorang ... yah, mari kita tidak pergi ke sana, oke?sumber
Jangan masukkan apa pun jika nama bidang cukup mendeskripsikan konten.
Umumnya, biarkan kode berdiri sendiri, dan hindari berkomentar jika memungkinkan. Ini mungkin membutuhkan refactoring.
EDIT: Di atas mengacu pada getter dan setter saja. Saya percaya apa pun yang tidak sepele harus dijawab dengan benar.
sumber
Anda boleh mengisi bagian (b), terutama jika Anda memberi komentar pada deklarasi field yang menunjukkan tentang apa field itu.
sumber
Jika javadoc tidak menambahkan apapun, saya menghapus javadoc dan menggunakan komentar yang dibuat secara otomatis.
sumber
Saya selalu mengisi keduanya. Waktu tambahan yang dihabiskan untuk mengetik dapat diabaikan, dan lebih banyak informasi lebih baik daripada lebih sedikit, secara umum.
sumber