Robert C. Martin alıntı bağlam dışına alınmıştır. İşte biraz daha fazla bağlamda alıntı:
Hiçbir şey iyi yerleştirilmiş bir yorum olarak bu kadar yardımcı olamaz. Hiçbir şey bir modülü anlamsız dogmatik yorumlardan daha fazla tutamaz. Hiçbir şey yalanları ve yanlış bilgiyi yayan eski bir kabarık yorum kadar zarar veremez.
Yorumlar, Schindler'in Listesi gibi değildir. "Saf iyi" değiller. Gerçekten de, yorumlar en iyi ihtimalle gerekli bir kötülüktür. Programlama dillerimiz yeterince açıklayıcı olsaydı ya da bu dilleri niyetimizi açık bir şekilde kullanma yeteneğine sahip olsaydık, yorumlara çok fazla ihtiyacımız olmazdı - belki de hiç.
Yorumların doğru kullanımı, kendimizi kodda ifade etmememizdeki tazminatı telafi etmektir. Ben başarısızlık kelimesini kullandığımı unutmayın. Bunu kastettim. Yorumlar her zaman başarısız olur. Onlara sahip olmalıyız çünkü kendimizi onlarsız nasıl ifade edeceğimizi her zaman çözemeyiz, ancak kullanımı kutlama için bir neden değildir.
Dolayısıyla, kendinizi bir yorum yazmanız gereken bir pozisyonda bulduğunuzda, düşünün ve tabloları çevirip kodunuzu ifade etmenin bir yolu olmadığını görün. Kendini kodda her ifade ettiğinde, kendini arkaya koymalısın. Her yorum yazdığınızda, ifade yeteneğinizin başarısızlığını hissetmeniz ve hissetmeniz gerekir.
( Buradan kopyalandı , ancak orijinal alıntı Temiz Kod'dan: Çevik Yazılım İşçiliğinin El Kitabı )
Bu teklifin "Yorumlar her zaman başarısız olur" olarak nasıl azaldığı, bazı insanların bağlamdan nasıl mantıklı bir teklif alacağı ve onu aptal dogmaya çevireceğine iyi bir örnektir.
API belgelerinin (javadoc gibi), kullanıcının kaynak kodunu okumak zorunda kalmadan kullanabilmesi için API'yi belgelemesi gerekir . Yani bu durumda dokümantasyon gereken yöntem ne yaptığını açıklar. Şimdi, "Bir ürünü kimliğine göre alır" ifadesinin gereksiz olduğunu iddia edebilirsiniz, çünkü yöntem adıyla zaten belirtilmiştir, ancak null
iade edilebilecek bilgilerin belgelenmesi kesinlikle önemlidir, çünkü bu, hiçbir şekilde açık değildir.
Yorumun gerekliliğinden kaçınmak istiyorsanız null
, API'yi daha belirgin hale getirerek, temel sorunu ( geçerli bir dönüş değeri olarak kullanılan) kaldırmanız gerekir . Örneğin Option<Product>
, bir tür geri döndürebilirsiniz , bu nedenle tür imzası, ürünün bulunamaması durumunda ne iade edileceğini açıkça belirtir .
Ancak, her durumda, bir API'yi yalnızca yöntem adları ve tür imzaları aracılığıyla tam olarak belgelemek gerçekçi değildir. Kullanıcının bilmesi gereken açık olmayan ek bilgiler için doc-comment kullanın. API belgelerini DateTime.AddMonths()
BCL’den alın:
AddMonths yöntemi, artık ay ve yılı hesaplar; artık yıl ve aydaki gün sayısını hesaba katar ve sonra da DateTime nesnesinin gün bölümünü ayarlar. Eğer sonuçlanan gün sonuçta geçen ay için geçerli bir gün değilse, sonuçta kalan ayın son geçerli günü kullanılır. Örneğin, 31 Mart + 1 ay = 30 Nisan. Elde edilen DateTime nesnesinin günün saati bölümü bu örnekle aynı kalır.
Bunu sadece yöntem adı ve imzasını kullanarak ifade edemezsiniz! Elbette sınıf belgeleriniz bu seviyede bir ayrıntı gerektirmeyebilir, sadece bir örnektir.
Satır içi yorumlar da fena değil.
Kötü yorumlar kötü. Örneğin, yalnızca kodda önemsiz olarak görülebilecekleri açıklayan yorumlar için, klasik örnek şöyledir:
// increment x by one
x++;
Bir değişkeni veya yöntemi yeniden adlandırarak veya kodu başka bir şekilde yeniden yapılandırarak netleştirilebilecek bir şeyi açıklayan yorumlar kod kokusudur:
// data1 is the collection of tasks which failed during execution
var data1 = getData1();
Bunlar Martin’in aleyhine yazdığı yorumlar. Yorum, net kod yazılmamasının bir belirtisidir - bu durumda değişkenler ve yöntemler için kendi kendini açıklayıcı isimler kullanmak. Yorumun kendisi elbette sorun değil, sorun kodu anlamak için yoruma ihtiyacımız var.
Ama yapılan yorumlar gereken kod, örneğin açık değil her şeyi açıklamak için kullanılan neden kodu belli olmayan bariz bir şekilde yazılır:
// need to reset foo before calling bar due to a bug in the foo component.
foo.reset()
foo.bar();
Aşırı sarsılmış bir kod parçasının ne yaptığını açıklayan yorumlar aynı zamanda bir kokudur, ancak düzeltme yorumların yasaklanmasına yol açmaz, düzeltme kodun düzeltilmesidir! Gerçek anlamda, basit bir kod gerçekleşir (umarım sadece bir refraktöre kadar geçici olarak) ancak sıradan bir geliştirici ilk kez mükemmel bir temiz kod yazmaz. Dolambaçlı kod buna yaptığından daha açıklayan bir yorum yazmak için çok daha iyidir durumda değil görüş bildirmek. Bu yorum ayrıca daha sonra yeniden ateşlenmeyi kolaylaştıracaktır.
Bazen kod kaçınılmaz olarak karmaşıktır. Karmaşık bir algoritma olabilir veya performans nedenleriyle açıklıktan ödün veren netlik olabilir. Yine yorumlar gerekli.