Bir yöntem yorumu genellikle çok benzer olduklarında hem özet hem de dönüş açıklaması içermeli midir?


10

Ben düzgün belgelenmiş kodun bir savunucusuyum ve bunun olası dezavantajlarının farkındayım . Bu, bu sorunun kapsamı dışındadır.

Visual Studio'da IntelliSense'i ne kadar sevdiğimi göz önünde bulundurarak herkese açık XML üyeleri ekleme kuralını izlemeyi seviyorum.

Ancak benim gibi aşırı bir yorumcunun bile rahatsız ettiği bir fazlalık biçimi vardır. Örnek olarak List.Exists () yöntemini ele alalım .

/// <summary>
///     Determines whether the List<T> contains elements
///     that match the conditions defined by the specified predicate.
/// </summary>
/// <returns>
///     true if the List<T> contains one or more elements that match the
///     conditions defined by the specified predicate; otherwise, false.
/// </returns>
public bool Exists( Predicate<T> match )
{
    ...
}

Summaryve returnstemelde aynı şeyi söylüyorlar. Sıklıkla, özeti daha çok bir returnsperspektiften yazarak , returnsbelgeleri tamamen bırakıyorum .

Liste belirtilen yüklem tarafından tanımlanan koşullarla eşleşen öğeler içerdiğinde true değerini, aksi takdirde false değerini döndürür.

Ayrıca, iade belgeleri IntelliSense'te görünmüyor, bu yüzden hemen ilgili bilgileri yazıyorum summary.

  1. Neden returnsayrı olarak dokümantasyon yapmanız gerekiyor summary?
  2. Microsoft'un bu standardı neden benimsediğine dair herhangi bir bilgi var mı?

Yanıtlar:


3

Birini diğerinden çıkarabilirsiniz, ancak bu iki bölüm ayrı kalır, çünkü kodu incelerken / kullanırken kişiyi ilgilendiren bölüme odaklanmaya yardımcı olur .

Örneğinizi alarak, şunu yazmayı tercih ederim:

/// <summary>
/// Determines whether the List<T> contains elements that match the conditions
/// defined by the specified predicate.
/// </summary>
/// <returns>
/// A value indicating whether at least one element matched the predicate.
/// </returns>
public bool Exists(Predicate<T> match)
{
    ...
}
  • Bu kodu gözden geçiriyorsanız ve yöntemin ne yaptığını bilmek istiyorsanız, özeti okudum ve önemsediğim şey bu.

  • Şimdi, yönteminizi kullandığımı ve girdiğimde aldığım dönüş değerinin garip olduğunu düşünelim. Şimdi, yöntemin ne yaptığını gerçekten bilmek istemiyorum, ancak dönüş değeri hakkında daha fazla şey bilmek istiyorum. Burada <returns/>bölüm yardımcı oluyor ve özeti okumama gerek yok.

Yine bu örnekte, özeti özetleyebilir ve özetten <returns/>beklenen dönüş değerini çıkarabilirsiniz. Ama aşırı aynı tartışmayı alarak tüm adresinden yöntemi belgelemek için gerek yoktur yöntemin adı, içine koymak: Bu durumda List<T>olan, Predicate<T> matchbir tek argüman kendisi oldukça açık olduğu gibi.

Unutmayın, kaynak kodu bir kez yazılır, ancak birçok kez okunur . Kodunuzun diğer okuyucuları için tüketim miktarını azaltabilir, XML belgelerinde ek bir cümle yazarken on saniye harcarsanız bunu yapın.


1
bir yöntem çağırıyorsunuz ve ne yaptığını bilmek istemiyorsunuz !?
jk.

1
@jk: Bunu önceden yapmış olduğunu ima ediyor. Sadece başarısız olduğunda, dönüş değerine 'odaklanmak' ister. Son paragraf için +1, aslında böyle hissediyorum. Hatta eğer dokümantasyon benim örnekte olduğu gibi bariz bir gerçeği devletler, onun beklentileri okuyucuyu güvencesini verir. Yorumlar düzgün bir şekilde yönetildiğinde, "bu yöntem düzgün bir şekilde düşünülür ve burada belirtilenlerden başka bir şey yapmaz" diyor, msdn belgelerinde olduğu gibi.
Steven Jeuris

2

Kullanımım: yöntemin ne yaptığını
<summary> açıklar (almak için ). Dönüş değerini açıklar .<returns>
<returns>

MSDN Bağlantılar: <summary>.<returns>


Bağlantı için teşekkürler. Ancak msdn belgelerinin hiçbir yerinde summary'yöntemin ne yaptığı' açıklanmaz. Ben msdn devletlerin ne olduğunu ve formüle etmek için ne formüle arasındaki farkı açıklığa kavuşturmak için zamanınızı yanıtlamak için zaman ayırıncaya kadar oy verdim. ; p
Steven Jeuris

2
MSDN bu konuda herhangi bir şey söylesin ya da söylemesin, bu aslında iyi bir kılavuzdur. Örneğinizde, özetin tamamını tekrarlamak zorunda değilsiniz, sadece " trueyüklem eşleşirse döndürür" diyebilirsiniz . Birinin neyi eşleştirdiğini bilmesi gerekiyorsa, belgelerin geri kalanını okuyabilir.
Blrfl

@Blrfl: Kılavuzun yanlış olduğunu söylemiyorum. Bir kaynağa atıfta bulunmanın yanlış olduğunu söylüyorum, olmadığı zaman orada bir şeyler yazıldığını ima etmek Bu yüzden aşağı oy. Bu cevabın düzenlendiğini görmek istiyorum.
Steven Jeuris

@StevenJeuris: MSDN belgelerine bağlantılar yalnızca tamamlayıcı bilgilerdi. MSDN, "a <summary>ve a <returns>bunu yaptığınızda" demez . Blrfl'in dediği gibi, bu sadece bir rehber kullanmak isteyebilir veya istemeyebilir.
Jake Berger

1
@StevenJeuris: Yazılma şekli nedeniyle birisinin MSDN'den geldiğini nasıl çıkarabileceğini görebiliyordum.
Jake Berger

1

İadeleri neden özetten ayrı olarak belgelemeniz gerekiyor?

Özet bölüm gerçekten uzun ve açıklayıcı ise, sonunda ayrı, kısa bir dönüş parçası olması yararlı olabilir.

Genellikle <summary>kendi kodumdaki kısmı yazıyorum , "İade _ " dediğiniz şekilde ifade ediyorum .

Bir arayanın yöntem adından ve parametrelerinden (ve adlarından) açık olmadığını bilmesi gereken herhangi bir açıklamada bulundum. Umarım, yöntem adı ve parametreleri yorumun çok kısa olabileceğini açıkça ortaya koyar.


1

Son zamanlarda aynı felsefi sorudan ayrıldım ve hala iyi bir çözümün ne olduğundan emin değilim. Ama şimdiye kadar bu benim yaklaşımımdı ...

  • Yöntem dokümantasyonu yalnızca harici arayanların bilmesi gerekenleri açıklar. Bu çalışmanın dahili olarak nasıl yapıldığı hakkında konuşmaz, ancak a) arayanın neden bu yöntemi çağırmak isteyeceğini, b) yöntemi çağırmanın beklenen sonuçlarının ne olacağını belirtir. Yöntemin nasıl çalıştığını belgelemeye ihtiyaç varsa, bunu kod gövdesinin içine koydum.
  • Bir yöntemin yeterli karmaşıklığı varsa, genel açıklama ve ayrı bir [döndürme] bölümü haklı görünmektedir. Okuyucunun tüm açıklamayı okumasını ve dönüş değerinin nasıl yorumlanacağını çıkarmaya çalışmasını istemezsiniz.
  • Yöntem ne kadar basit olduğunu açıklamak için en iyi yolu "Bu yöntem kişinin adresini döndürür" gibi bir şey söylemek, o zaman ekleme eklemek DRY ilkesine aykırı gibi görünüyor gibi [döner] bölümünü atlamak bunun büyük bir savunucusu. Birçok tek katmanlı erişimci yöntemi bu kategoriye giriyor gibi görünüyor.

Evet, bahsettiğim noktalarla bağlantı kurabilirim ve aşağı yukarı onları takip ederim. Sorun şu ki, oldukça öznel bir sözleşme, Microsoft'un returnsbunun yerine her zaman eklemeyi seçmesinin nedeni olabilir . Ayrıca, her zaman aynı formülasyonu kullandıklarını, örneğin "true if ...; aksi takdirde false" kullandıklarını fark ettim . Bunun için de bir sözleşme belirleyip belirlemediklerini merak ediyorum.
Steven Jeuris

0

Özet, faydalı olabileceği kadar açıklayıcı olmalıdır; parametrelerin açıklamaları ve dönüş değeri kısa ve tatlı olmalıdır. Bir kelime ile beş arasında bir seçiminiz varsa, bir kelime kullanın. Örneğinizi sıkılaştıralım:

Liste, belirtilen yüklem tarafından tanımlanan koşullarla eşleşen bir veya daha fazla öğe içeriyorsa true; aksi takdirde yanlış.

olur

List öğelerinden herhangi biri yüklemle eşleşirse true; aksi halde yanlış.


Aslında, böyle yazmak bana Microsoft'un "Başlayıp başlamadığını belirler ..." ile başlamanın standart yolunun avantajını anlamamı sağladı . Sonuçlarının ne olduğunu söylemeden önce ne yaptığını açıkladığı için daha okunabilir olduğunu hissediyorum. Bu dolaylı yoldan bir adım daha az. returnsMicrosoft'tan çok uzun olduğunu kabul ediyorum . Bir şey yapması gerekiyorsa, sadece doğru olanın eşleştiği anlamına gelmesini ve yanlış olmadığı anlamına gelmesini sağlamaktır.
Steven Jeuris
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.