Que dois-je inclure dans les commentaires de documentation XML?

13

J'essaie de mettre un point d'honneur à mieux documenter mon code, en particulier en ce qui concerne les commentaires XML sur les membres de la classe, mais souvent cela semble juste idiot.

Dans le cas des gestionnaires d'événements, la convention de dénomination et les paramètres sont standard et clairs:

/// <summary>
/// Handler for myCollection's CollectionChanged Event.
/// </summary>
/// <param name="sender">Event Sender</param>
/// <param name="e">Event Arguments</param>
private void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    // actual code here...
}

J'ai également fréquemment des propriétés simples qui sont (IMO) nommées clairement afin que le résumé soit redondant:

/// <summary>
/// Indicates if an item is selected.
/// </summary>
public bool ItemIsSelected
{ get { return (SelectedItem != null); } }

Je n'ai pas l'impression que de tels commentaires n'ajoutent aucune information que la déclaration elle-même ne transmet pas déjà. La sagesse générale semble être qu'il vaut mieux ne pas écrire un commentaire qui répète le code.

De toute évidence, la documentation XML est plus que de simples commentaires de code en ligne, et aura idéalement une couverture à 100%. Que dois- je écrire dans de tels cas? Si ces exemples sont OK, quelle valeur ajoutent-ils que je n'apprécie peut-être pas maintenant?

mbmcavoy
la source
6
"et, idéalement, aura une couverture à 100%" - C'est très discutable. Je les aime pour l'interface publique d'un type uniquement pour les popups intellisense, mais pour les méthodes privées, ils sont tout simplement trop verbeux IMO
Ed S.
3
La couverture à 100% ne s'applique pas aux méthodes privées, en particulier aux gestionnaires d'événements.
SLaks
1
GhostDoc écrit ma documentation pour moi. "Que GetData()faites-vous" demandez-vous? Eh bien, Gets the databien sûr!
Devin Burke
2
@Justin: GhostDoc a l'air plutôt cool. Je pourrais le ramasser.
1
@Justin: arg, je déteste GhostDoc - il semble brillant au début, mais après un certain temps, vous vous rendez compte que vous pouvez repérer les commentaires générés automatiquement à un kilomètre, généralement lorsque vous revenez à l'ancien code et devez comprendre ce qu'il fait. Bien qu'il rende très facile de commenter tout XML, il ne garantit pas que ces commentaires contiennent des informations réelles. GhostDoc vous donne un bon point de départ, mais il est très facile d'être paresseux et de laisser de côté tout ce que vous n'auriez pas pu comprendre en jetant un œil au nom et à la signature.
Keith

Réponses:

10

Les commentaires de doc XML sont destinés aux membres publics.

L' avertissement du compilateur indique clairement ceci:

Commentaire XML manquant pour le type ou le membre visible par le public 'Type_or_Member'

Vous ne devez ajouter des commentaires XML aux membres privés que si ces membres ne sont pas déjà évidents d'après leur nom.

SLaks
la source
6

L'opinion pure ici, alors prenez-la pour ce qu'elle vaut.

Je déteste les commentaires xml superflus. Doublement donc pour ceux de style doc fantôme qui ajoutent simplement des espaces au nom de la méthode / propriété. Il n'ajoute aucune valeur et encombre simplement ma vision du code réel.

Si quelque chose a besoin d'être clarifié, commentez-le. Cependant, beaucoup de clarté peut être transmise par de petites méthodes ciblées avec des noms significatifs. Ne commentez pas le code si vous pouvez l'améliorer et rendre le commentaire inutile.

Ne me lancez même pas sur l'utilisation inutile de this.et Me..

En guise de remarque, j'aimerais avoir un complément Visual Studio qui me permette de basculer la visibilité des commentaires xml. (indice, indice)

codeConcussion
la source
Je suppose que la this.chose a peut-être commencé parce que, pour une raison quelconque, les directives officielles de Microsoft recommandaient d'utiliser exactement la même convention de dénomination pour les variables locales et les privatevariables d' instance . C'est un style terriblement imparfait, OMI - dans certains cas, vous êtes un gros doigt loin d'une StackOverflowExceptionpropriétéset ou MyProperty = MyProperty;provoquant l'initialisation d'un champ à zéro au lieu d'un paramètre constructeur, et même Microsoft a continué à utiliser m_la plupart du temps en interne .
2018 à 15h01
2

Sur un membre public, les documents XML doivent être assez verbeux et complets, comme l'a mentionné @SLaks.

Cependant, ils peuvent également être très utiles sur les membres privés, protégés ou internes, car Visual Studio remplira intellisense et aidera les info-bulles avec les commentaires de la documentation XML.

Cela signifie que:

// describe what this does
private void DoSomething() 
{
    // or describe it here...

Peut-être une documentation parfaitement suffisante, mais:

/// <summary>describe what this does</summary>
private void DoSomething() 
{

Sera beaucoup plus facile à voir rapidement ailleurs dans votre code.

Généralement sur les commentaires XML publics que j'écris pour certains utilisateurs externes de l'API, et sur les commentaires XML internes que j'écris pour moi ou d'autres membres de mon équipe.

Ignorer les descriptions des paramètres est probablement une mauvaise idée pour les premiers et bien pour les seconds.

J'ajouterais (dans les documents API publics en particulier) toujours inclure si getou setsur les propriétés:

/// <summary>Gets a value indicating whether an item is selected.</summary>
public bool ItemIsSelected
{ 
    get { return SelectedItem != null; } 
}

Il n'est pas évident d'après l'intellisense de C # si getset sont disponibles ou , mais le mettre sur le commentaire XML signifie que vous pouvez le voir en un coup d'œil à partir de l'infobulle.

Keith
la source
Dépend. Et si vous avez une propriété public geten internal settant que propriété? Comment le commentez-vous? :-)
Guillaume
1
@Guillaume puisque les commentaires XML sont publics, j'irais simplement documenter le getXML et documenter le setavec des //commentaires réguliers .
Keith