Yorumlar bir tür belge olarak kabul ediliyor mu?


11

Kendim için küçük komut dosyaları yazarken, kodlarımı yüksek yorumlarla yığarım (bazen ben koddan daha fazla yorum yaparım). Konuştuğum bir çok insan, kişisel olmasına rağmen bu senaryoları belgelemem gerektiğini söyledi, böylece onları satarsam hazır olurdum. Ancak yorumlar bir tür dokümantasyon değil mi?

Bu olmaz:

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

özellikle bir geliştirici kodumu kullanıyorsa, belgeler dikkate alınmalıdır? Yoksa belgelerin kodun dışında olduğu düşünülüyor mu?


11
JavaDocs veya Doxygen gibi bir belge oluşturma sistemi kullanıyorsanız, yorumlar tam anlamıyla belgelendirmedir.
Robot Gort

5
YANGNI ( xprogramming.com/Practices/PracNotNeed.html ). Kodunuzu memnuniyetinize göre belgeleyin. Bırakın (varsa) müşteri size belgeleri kendi memnuniyetine göre yazsın. Bir çok insanla ne söyleyeceğiniz konusunda endişelenmeyin (size ödeme yapmadıkları sürece).
emory

1
2 yorumunuzu 2 yararsız, neden $ foo yerine bar. Bu doğru değilse, yorum yanlıştır. İlk yorum yanlış. Bu bir ödev.
ctrl-alt-delor

2
Yorum eklemek istediğinizde, kodunuzu yorum gerektirmeyecek şekilde değiştirin. Her şey dokümantasyon, kod dokümantasyon, Yorumlar genellikle [ek] bilgi içermiyor veya yanlış. Neyi (kod sözleşmelerinin bu konuda yardımcı olabileceğini) ve nedenini belgeleyin. Belgeleri koda yakın tutun, yorumları kullanın. Belgeler Üzerindeki Belgeler: Belgeler üzerindeki Yorumlar, Yorumlar Üzerindeki Kodu Temizle.
ctrl-alt-delor

2
YANGNI "ihtiyacınız olmayacak" mı
Chris S

Yanıtlar:


27

Yorumlar kesinlikle dokümantasyon. Çoğu proje için yorumlar maalesef proje belgelerinin birincil (sadece değil) biçimidir. Bu nedenle, doğru yapmak çok önemlidir. Kod değişikliklerine rağmen bu belgelerin doğru kaldığından emin olmanız gerekir. Bu, yorumlarda sık karşılaşılan bir sorundur. Geliştiriciler, tanıdık bir kodda çalışırken genellikle onları "ayarlar", bu nedenle yorumları kodu yansıtacak şekilde güncellemeyi unuturlar. Bu, eski ve yanıltıcı yorumlar oluşturabilir.

Birçok kişi kodu kendi kendine belgelemeyi önerir. Bu, yorumlar yerine kodunuzu bunlara olan ihtiyacı ortadan kaldırmak için yeniden yapılandırdığınız anlamına gelir. Bu, "ne" ve "nasıl" yorumlarının çoğundan kurtulabilir, ancak "neden" yorumlarına gerçekten yardımcı olmaz. Bu, çoğu yorumdan kurtulmak için etkili bir şekilde çalışabilse de, bir yorum yazmanın bir parça kodu belgelemenin en basit ve en etkili yolu olduğu birçok zaman vardır.


3
"Çoğu proje için yorumlar proje belgelerinin birincil (sadece değil) formudur." - bunun için aşağı oy istemek, ancak ne yazık ki gerçek bir ifade olarak kabul edilmelidir. Umarım işlerin böyle olması gerektiğini iddia etmek sizin niyetiniz değildir.
Edward Strange

2
Sahip olduğum tek güvenilir belge kaynak kodunun kendisi olduğu için buna gerçekten katılmıyorum. Hem yorumlar hem de "dokümantasyon" nadiren gerçekleşen kodla korunmalıdır. Bu nedenle, tek güvenilir belge kaynağı kodunuzdur!
martiert

3
@martiert Eskiden de aynı şekilde hissediyordum, ama bunun pratikte pek işe yaramadığını gördüm. Tüm bu "neden" yorumları, kod olarak "neden" bilgisini çıkarmaya çalışmaktan çok yorum olarak daha açıktır. Kesinlikle kendi belgeleme kodu çoğu yorumu kaldırmak için kullanılabilir (ve kullanılmalıdır) , ancak bazen bir yorum bir şeyi belgelemenin en basit, en açık ve en zaman etkili yoludur.
Oleksi

3
@martiert Kendi kendini belgeleyen kodla ilgili sorun, başka bir yerde belgelere referans verilmesine izin vermemesidir. Kodda gördüğüm en iyi yorumlardan bazıları, kullanılan algoritmanın ayrıntılarını veya sihirli sabitlerin seçimini açıklayan akademik makalelere referanslar olmuştur. Hiçbir öz-belge, bazı kritik belgelerin açık olmadığı gerçeğinden kaçınmaya yardımcı olmayacaktır . “Neden” genellikle bu kategoriye girer ve bazen “nasıl” da olur.
Donal Fellows

3
Ayrıca, birçok dilde yapılan yorumların gerçek belgeleri oluşturmak için kullanıldığını da unutmayın ... bu yüzden çoğu zaman aynıdır. Örnek olarak MSDN'ye bakın.
Steven Evers

12

Bunlar bir belge biçimidir, ancak belgelerin izleyicinin gözünde olduğunu unutmayın.

  • Bazıları için kendi kendini belgeleyen kod yeterlidir. Ancak bu, müşteri olarak bir miktar teknik detayı varsayar. Bunun yeterli olduğunu düşünmeye dikkat etmeliyiz, çünkü egomuz bize "Bu kodun ne yaptığı açıktır" ama zaman aksini ispatlayabilir. Ayrıca, okuyucunun becerilerini önceden bildiğinizi varsayar.

  • Kaynak koduna bakanlar ancak daha az teknik uzmanlığa sahip olanlar için yorumlar iyi olabilir. Ancak bu, birinin kaynak koduna baktığını varsayar.

  • Teknik iseniz, ancak tüm kaynak kodunu okumak için zamanınız yoksa, teknik bir kılavuz gerekli olabilir.

  • Kullanıcı teknik becerilere sahip değilse, ancak ne olduğunu bilmeye ihtiyaç duyuyorsa, kullanıcı dokümantasyonu neye ihtiyaç duyduğudur.

Asıl soru müşterinizin kim olduğu. Eğer öyleyseniz, kod veya yorumları kendiniz belgelemek yeterlidir. Başka biri içinse, dokümantasyonunuzu genişletmek isteyebilirsiniz.


17
Kendini belgeleyen kod bir yalandır.
yannis

1
@YannisRizos Açık bir yalandan ziyade ulaşılamaz bir hedef gibi.
Ptharien'in Alevi

2
@YannisRizos: haklı olabilirsiniz, ancak çok sayıda yoruma ihtiyaç duyan kod neredeyse her zaman çok kötü bir koddur ve neredeyse daha az yoruma ihtiyaç duyacak şekilde yazılabilir.
Doc Brown

9
@DocBrown Bağlıdır. İnsanları döngüler için belgelendirdiklerini gördüm ve 100 çeşit iş mantığının kendi kendini belgelediğini iddia eden insanlar gördüm. Gerçek şu ki, aşırı yorumlar zarar veremez (eski / yanlış hariç) ve aşırı yorumlama ve kendi kendini belgeleme kodu arasında seçim yapmak zorunda kalırsam, her zaman ilkini seçeceğim. Tabii ki, Deneksi'nin açıkladığı gibi, dengeli ve nokta yorumlarına gitmeyi tercih ederim .
yannis

1
@MathAttack En iyi IDE'ler yorumları gizleyebilir / katlayabilir. Ama evet, bazen yoluna giriyorlar.
yannis

3

Evet, yorumlar bir belge biçimidir. Kodunuzu korumak veya güncellemek zorunda olan biri için yararlı belgeler olup olmadıkları açık bir sorudur.

Bunu bir örnek olarak kastettiğini biliyorum, ama

print $foo; # this prints "bar"

yararlı değil; sadece görsel karmaşa ekler. Açık olanı belgelemeyin.

Bir yöntemin veya işlev tanımının başındaki, işlevi veya yöntemin amacını ( üst düzey terimlerle) tanımlayan yorumları , girişleri, çıkışları, dönüş değerini (varsa), istisnaları (varsa), önkoşulları ve sonkoşulları yararlı, ancak birisine fonksiyonun veya yöntemin nasıl kullanılması gerektiğini söyleyecek derecede. İşlevin neden var olduğunu açıklamazlar .

Başkasının ihtiyaçlarını kodunuzu korumak için, o zaman gereksinimleri ve tasarım bir yerlerde belgelemek gerekiyor ve bu en tipik değil kaynak kodunun kendisinde yapılır.


3

Bob Martin'in bu yaklaşımına bağlı kaldığımı, Temiz Kod'dan, genellikle fazla yorum yaptığınızı veya yorum yazdığınızı veya belgeleri bıraktığınızı düşünüp düşünmediğinizi çözer:

Biz yazarız. Yazarlar hakkında bir şey okuyucularının olması. Gerçekten de, yazarlar okurlarıyla iyi iletişim kurmaktan sorumludur. Bir sonraki kod satırını yazdığınızda, çabanızı değerlendirecek okuyucular için yazan bir yazar olduğunuzu unutmayın.

... okumak ve yazmak için harcanan zamanın oranı 10: 1'in üzerindedir. Yeni kod yazma çabasının bir parçası olarak sürekli olarak eski kodu okuyoruz.

Başka bir deyişle, kodunuz dokümantasyon olmadan kendi kendini açıklıyor mu? Bunun için belirlenmiş bir kural yoktur (belgelerine herkesin erişebildiği Microsoft gibi biriyle çalışmıyorsanız), çoğunlukla kodun gelecekteki okuyucularına genellikle sizin olan yardımınıza bağlıdır.


2

Belgeler belgelemek gerekir Neden değil nasıl . Kodda nasıl açıkça görülmeli, yani bazı arcane optimizasyon hilesi veya yaygın olarak ortaya çıkmayan başka bir dile özgü teknik olmadığı sürece.

Neden muhtemelen bir değişiklik günlüğüne veya şube adına aranabilir hikaye kimlikleri ile yorumlarınızı işlemeye bağlı bir ürün birikim gibi başka bir yerde olmalı, kodu olmamalıdır.


1
Gerçekten zor şeyler akademik bir makalede (veya bazen patentte) olmalıdır.
Donal Üyeleri

2

Yorumlar bir belge türüdür. Daha düşük bir form ve kodunuzun daha iyi çarpanlarına ayrılabileceğiniz bir alan bulduğunuzu gösteren bir form.

Kulağa zorla yorum yaptığınız anlaşılıyor. Başka seçeneklere sahip olmak iyi bir şey olabilir. Üç üstün belge biçimini düşünebilirim:

1) Kodunuzu daha iyi faktörler. Yorum eklemek yerine, adı yazmak üzere olduğunuz yorumun metni olan bir yöntemi veya işlevi çıkarın. Kod, yorumunuzun ne hakkında olduğunu söylemektedir.

2) Testler. Bu genellikle aradığım dokümantasyon şeklidir. Birim testleri ve kabul testleri canlı belgelerdir ve 1. maddede olduğu gibi amacı ifade etmek için çok sayıda anlamlı yöntem kullanıldığında kolayca okunabilir.

3) Komut dosyaları için --help seçeneği. Doktor burada deli gidebilirsiniz. Örneklere sadık kalın, kullanıcının neye ihtiyacı olacağını tahmin edin.

Özet olarak, bir yorumda bulunmaya meyilli bulursanız, kodu daha iyi yapılandırarak okuyucu ile iletişim kurmanın bir yolu olup olmadığını kontrol edin. Yoksa bu kodun neden orada olduğunu bildiren bir test var mı? Hala yorum yapmaya eğilimli hissediyorsanız, yenilgiyi kabul edin ve yapın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.