Saya menulis kode berikut:
if (boutique == null) {
boutique = new Boutique();
boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
boutique.setSelected(false);
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());
boutiqueDao.persist(boutique);
} else {
boutique.setSite(site);
boutique.setUrlLogo(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getLogo());
boutique.setUrlBoutique(CmsProperties.URL_FLUX_BOUTIQUE+fluxBoutique.getUrl());
boutique.setNom(fluxBoutique.getNom());
//boutique.setSelected(false);
boutique.setIdWebSC(fluxBoutique.getId());
boutique.setDateModification(new Date());
boutiqueDao.merge(boutique);
}
Ada garis komentar di sini. Tapi saya pikir itu membuat kode lebih jelas, dengan memperjelas apa perbedaan antara if
dan else
. Perbedaannya bahkan lebih mencolok dengan penyorotan warna.
Bisakah mengomentari kode seperti ini merupakan ide bagus?
sumber
Masalah terbesar dengan kode ini adalah Anda menduplikasi 6 baris itu. Setelah Anda menghilangkan duplikasi itu, komentar itu tidak berguna.
Jika Anda membuat
boutiqueDao.mergeOrPersist
metode, Anda dapat menulis ulang ini sebagai:Kode yang membuat atau memperbarui objek tertentu adalah umum, jadi Anda harus menyelesaikannya sekali, misalnya dengan membuat
mergeOrPersist
metode. Anda tentu tidak boleh menduplikasi semua kode tugas untuk kedua kasus tersebut.Banyak ORM telah membangun dukungan untuk ini dalam beberapa cara. Misalnya mereka mungkin membuat baris baru jika
id
nol, dan memperbarui baris yang ada jikaid
bukan nol. Bentuk persisnya tergantung pada ORM yang dimaksud, dan karena saya tidak terbiasa dengan teknologi yang Anda gunakan, saya tidak dapat membantu Anda dengan itu.Jika Anda tidak ingin membuat
mergeOrPersist
metode, Anda harus menghilangkan duplikasi dengan cara lain, misalnya dengan memperkenalkanisNewBoutique
bendera. Itu mungkin tidak cantik, tetapi masih jauh lebih baik daripada menduplikasi seluruh logika tugas.sumber
Ini adalah ide yang sangat mengerikan . Tidak jelas apa tujuannya. Apakah pengembang berkomentar secara tidak sengaja? Untuk menguji sesuatu? Apa yang sedang terjadi?!
Selain dari kenyataan bahwa saya melihat 6 baris yang benar-benar sama dalam kedua kasus. Sebaliknya, Anda harus mencegah duplikasi kode ini. Maka akan lebih jelas bahwa dalam satu kasus Anda juga memanggil setSelected.
sumber
Tidak, itu ide yang buruk. Berdasarkan potongan kode itu, pikiran-pikiran berikut muncul di benak saya:
Setelah melihat ribuan baris kode komentar, saya sekarang melakukan satu-satunya hal yang masuk akal ketika saya melihatnya: Saya segera menghapusnya.
Tidak ada alasan masuk akal untuk memeriksa kode yang dikomentari ke dalam repositori.
Selain itu, kode Anda menggunakan banyak duplikasi. Saya sarankan Anda mengoptimalkan itu untuk keterbacaan manusia sesegera mungkin.
sumber
Saya hanya ingin menambahkan jawaban CodesInChaos, dengan menunjukkan bahwa Anda dapat melakukan refactor lebih lanjut menjadi metode kecil . Berbagi fungsionalitas umum dengan komposisi menghindari persyaratan:
sumber
null
benda - benda, semakin baik (saya menemukan solusi ini adalah contoh yang baik).boutiqueDao
masukan untukcreate
danupdate
.Meskipun ini jelas bukan kasus yang baik untuk kode komentar ada situasi yang saya pikir menjamin:
Ini peringatan bagi siapa pun yang melihatnya nanti bahwa perbaikan yang jelas tidak.
Sunting: Saya sedang berbicara tentang sesuatu yang kecil. Jika besar, Anda menjelaskannya.
sumber
// the following part done like it is because of X
? Jelaskan mengapa Anda melakukan sesuatu dengan cara yang Anda lakukan, tidak mengapa Anda melakukannya tidak untuk itu dalam beberapa tertentu cara. Dalam contoh khusus Anda, itu menghilangkan kebutuhan untuk berpotensi besar blok kode komentar sepenuhnya. (Saya tidak mengundurkan diri, tetapi pasti bisa melihat mengapa ini akan dibatalkan.)n
kecil, dan algo eksponensial jauh lebih cepat. Jika entah bagaimanan
berubah di kemudian hari, bagaimana pengembang masa depan yang menindaklanjuti proyek saya mengetahui implementasi berbeda dari kode yang terkubur dalam ratusan komit dalam kendali sumber?Dalam contoh khusus ini, saya menemukan kode yang dikomentari sangat ambigu, sebagian besar karena alasan yang diuraikan dalam jawaban Dibkke . Yang lain telah menyarankan cara-cara Anda dapat memperbaiki kode untuk menghindari godaan untuk melakukan hal ini, meskipun, jika itu tidak memungkinkan untuk beberapa alasan (misalnya, garis-garisnya serupa, tetapi tidak cukup dekat), saya akan menghargai komentar seperti:
Namun, saya pikir ada beberapa situasi di mana meninggalkan (atau bahkan menambahkan komentar) kode tidak tercela. Ketika menggunakan sesuatu seperti MATLAB atau NumPY, kita sering dapat menulis kode yang sama yang 1) berulang di atas array, memproses satu elemen pada satu waktu atau 2) mengoperasikan seluruh array sekaligus. Dalam beberapa kasus, yang terakhir jauh lebih cepat, tetapi juga jauh lebih sulit dibaca. Jika saya mengganti beberapa kode dengan vektor yang setara, saya menyematkan kode asli dalam komentar terdekat, seperti ini:
Jelas, kita perlu berhati-hati bahwa kedua versi benar-benar melakukan hal yang sama dan bahwa komentar tetap sinkron dengan kode aktual atau dihapus jika kode berubah. Jelas, peringatan biasa tentang optimasi prematur juga berlaku ...
sumber
Satu-satunya saat saya melihat kode commented-out yang berguna adalah file config, di mana kode untuk setiap opsi disediakan, tetapi berkomentar, membuatnya mudah untuk mengaktifkan pengaturan dengan hanya menghapus penanda komentar:
Dalam hal ini, kode yang dikomentari membantu untuk mendokumentasikan semua opsi yang tersedia, dan bagaimana menggunakannya. Ini juga konvensional untuk menggunakan nilai-nilai default di seluruh, sehingga kode ini juga mendokumentasikan pengaturan default.
sumber
Secara umum, kode hanya mendokumentasikan diri sendiri untuk orang yang menulis kode. Jika dokumentasi diperlukan, tulis dokumentasi. Tidak dapat diterima untuk mengharapkan pengembang baru ke basis kode sumber akan duduk membaca ribuan baris kode untuk mencoba mencari tahu dari tingkat tinggi apa yang terjadi.
Dalam hal ini, tujuan dari baris kode yang dikomentari adalah untuk menunjukkan perbedaan antara dua contoh kode duplikat. Alih-alih mencoba mendokumentasikan perbedaan secara halus dengan komentar, tulis ulang kode sehingga masuk akal. Kemudian, jika Anda masih merasa perlu mengomentari kodenya, tulis komentar yang sesuai.
sumber
Tidak, kode yang dikomentari menjadi basi, dan segera lebih buruk daripada tidak berharga, sering kali berbahaya, karena memperkuat beberapa aspek implementasi, bersama dengan semua asumsi saat ini.
Komentar harus mencakup detail antarmuka dan fungsi yang dimaksudkan; "fungsi yang dimaksudkan": dapat mencakup, pertama kita coba ini, lalu kita coba itu, lalu kita gagal dengan cara ini.
Programmer yang saya lihat mencoba untuk meninggalkan hal-hal dalam komentar hanya cinta dengan apa yang mereka tulis, tidak ingin kehilangan itu, bahkan jika itu tidak menambahkan apa pun ke produk jadi.
sumber
Ini bisa dalam kasus yang sangat jarang, tetapi tidak seperti yang Anda lakukan. Jawaban-jawaban lain cukup baik untuk menjelaskan alasannya.
Salah satu kasus yang jarang terjadi adalah spec template RPM yang kami gunakan di toko saya sebagai titik awal untuk semua paket baru, sebagian besar untuk memastikan tidak ada yang penting yang ditinggalkan. Sebagian besar, tetapi tidak semua paket kami memiliki tarball yang berisi sumber-sumber yang memiliki nama standar dan ditentukan dengan tag:
Untuk paket tanpa sumber, kami mengomentari tag dan memberikan komentar lain di atasnya untuk mempertahankan format standar dan menunjukkan bahwa seseorang telah berhenti dan memikirkan masalah sebagai bagian dari proses pengembangan:
Anda tidak menambahkan kode yang Anda tahu tidak akan digunakan karena, seperti yang telah dibahas orang lain, itu bisa saja keliru untuk sesuatu yang ada di sana. Bisa. namun, berguna untuk menambahkan komentar yang menjelaskan mengapa kode yang diharapkan ada ada yang hilang:
sumber
Kode yang dikomentari tidak digunakan oleh aplikasi, jadi perlu disertai dengan komentar lebih lanjut yang menyatakan mengapa tidak digunakan. Tapi dalam konteks itu, ada yang situasi di mana kode komentar-out dapat berguna.
Apa yang terlintas dalam pikiran saya adalah kasus di mana Anda memecahkan masalah menggunakan pendekatan umum dan menarik, tetapi kemudian ternyata persyaratan dari masalah Anda yang sebenarnya sedikit berbeda dari masalah itu. Terutama jika persyaratan Anda ternyata membutuhkan lebih banyak kode, godaan bagi pengelola untuk "mengoptimalkan" kode menggunakan pendekatan lama kemungkinan akan kuat, tetapi melakukan itu hanya akan membawa bug kembali. Menjaga implementasi "salah" di dalam komentar akan membantu menghilangkan ini, karena Anda dapat menggunakannya untuk menggambarkan mengapa pendekatan itu salah dalam situasi ini.
Ini bukan situasi yang bisa saya bayangkan terjadi sangat sering. Biasanya, itu harus cukup untuk menjelaskan hal-hal tanpa menyertakan contoh "salah" implementasi. Tapi saya bisa membayangkan kasus di mana itu tidak cukup, jadi karena pertanyaannya adalah apakah itu bisa berguna, ya, itu bisa. Hanya tidak sebagian besar waktu.
sumber
Ini tidak terlihat teman baik.
Kode yang dikomentari adalah ... hanya bukan kode. Kode adalah untuk implementasi logika. Membuat kode lebih mudah dibaca dengan sendirinya adalah seni. Seperti @CodesInChaos sudah menyarankan bahwa baris kode berulang tidak implementasi logika yang sangat baik .
Apakah Anda benar-benar berpikir bahwa satu programmer sejati akan lebih memilih keterbacaan daripada implementasi logis. (Ngomong-ngomong, kami memiliki komentar dan 'pelengkap' untuk dimasukkan ke dalam representasi logis kami).
Sejauh yang saya ketahui orang harus menulis kode untuk kompiler dan itu bagus - jika 'itu' memahami kode itu. Untuk keterbacaan manusia Komentar baik untuk pengembang (dalam jangka panjang), untuk orang-orang yang menggunakan kembali kode itu (mis. Penguji).
Kalau tidak, Anda dapat mencoba sesuatu yang lebih fleksibel di sini, sesuatu seperti
boutique.setSite (situs) dapat diganti dengan
setsiteof.boutique (situs). Ada berbagai aspek dan perspektif OOP yang melaluinya Anda dapat meningkatkan keterbacaan.
Sementara kode ini tampaknya sangat menarik pada awalnya dan orang dapat berpikir bahwa ia telah menemukan cara untuk keterbacaan manusia sementara kompiler juga melakukan tugasnya dengan sempurna, dan kita semua mulai mengikuti praktik ini, itu akan mengarah ke file fuzzy yang akan menjadi kurang dapat dibaca. dalam waktu dan lebih kompleks karena akan memperluas jalannya ke bawah.
sumber