Partie 1. Introduction...
Partie 8. DénominationPartie 9. Commentaires...

Cet article est une traduction d'une partie du guide de style Google en C ++ en russe.
Article original (fork sur github),
traduction mise Ă jour .
Commentaires
Des commentaires sont requis pour le code (si vous prĂ©voyez de le lire). Les rĂšgles suivantes dĂ©crivent ce que vous devez commenter et comment. Mais rappelez-vous: bien que les commentaires soient trĂšs importants, le code parfait est auto-documentĂ©. L'utilisation de noms "parlants" pour les types et les variables est bien meilleure que les noms obscurs, qui doivent ensuite ĂȘtre Ă©crits dans les commentaires.
Commentez le code en tenant compte de ses lecteurs suivants: des programmeurs qui ont besoin de comprendre votre code. Gardez Ă l'esprit que vous pouvez ĂȘtre le prochain lecteur!
Style de commentaire
Utilisez
// ou
/ * * / jusqu'à ce que l'uniformité soit violée.
Vous pouvez utiliser
// ou
/ ** / , cependant
// est de loin préférable. Cependant, alignez toujours votre style de commentaire sur le code existant.
Commentaires dans l'en-tĂȘte du fichier
InsĂ©rez un en-tĂȘte de licence en haut de chaque fichier.
Les commentaires dans le fichier doivent dĂ©crire son contenu. Si un fichier dĂ©clare, dĂ©crit ou teste une abstraction (pour laquelle il existe dĂ©jĂ un commentaire), une description supplĂ©mentaire dans l'en-tĂȘte du fichier n'est pas nĂ©cessaire. Sinon, insĂ©rez une description du contenu en haut du fichier.
Informations légales et liste des auteurs
Chaque fichier doit contenir des informations de licence. Le format de la description dépend de la licence utilisée dans le projet. Chaque licence (Apache 2.0, BSD, LGPL, GPL, etc.) peut avoir ses propres exigences de conception.
Si vous apportez des modifications importantes au fichier, pensez à supprimer la liste précédente des auteurs. Les fichiers mis à jour ne peuvent plus contenir de mention du droit d'auteur et une liste d'auteurs.
Contenu du fichier
Si
.h dĂ©clare plusieurs abstractions, le commentaire dans l'en-tĂȘte du fichier doit gĂ©nĂ©ralement dĂ©crire le contenu du fichier et comment les abstractions sont liĂ©es les unes aux autres. Une, deux phrases dans un commentaire suffisent gĂ©nĂ©ralement. Des informations plus dĂ©taillĂ©es sont signĂ©es ailleurs (pas dans l'en-tĂȘte du fichier).
Ne dupliquez pas les commentaires dans les fichiers
.h et
.cc - les commentaires deviennent différents au fil du temps.
Commentaires de classe
Chaque dĂ©claration de classe (Ă l'exception des dĂ©clarations trĂšs Ă©videntes) doit ĂȘtre accompagnĂ©e d'un commentaire, Ă quoi sert la classe et comment l'utiliser.
Le commentaire sur la classe doit ĂȘtre suffisant pour comprendre: comment et quand utiliser la classe, des exigences supplĂ©mentaires pour une utilisation correcte de la classe. DĂ©crivez, si nĂ©cessaire, les restrictions (hypothĂšses) sur la synchronisation dans la classe. Si une instance de la classe peut ĂȘtre utilisĂ©e Ă partir de diffĂ©rents threads, assurez-vous de noter les rĂšgles multi-thread.
Vous pouvez également fournir de courts exemples de code dans le commentaire de la classe pour montrer à quel point il est plus facile d'utiliser la classe.
En rÚgle générale, une classe est déclarée / définie dans différents fichiers (
.h et
.cc ). Les commentaires dĂ©crivant l'utilisation de la classe doivent ĂȘtre Ă cĂŽtĂ© de la dĂ©finition de l'interface. Les commentaires sur les subtilitĂ©s de l'implĂ©mentation doivent ĂȘtre proches du code des mĂ©thodes elles-mĂȘmes.
Commentaires sur la fonction
Les commentaires sur une déclaration de fonction doivent décrire l'utilisation de la fonction (sauf dans les cas les plus évidents). Les commentaires sur la définition de la fonction décrivent l'implémentation.
Déclaration de fonction
La dĂ©claration de chaque fonction doit avoir un commentaire (juste avant la dĂ©claration), ce que fait la fonction et comment l'utiliser. Un commentaire ne peut ĂȘtre omis que si la fonction est simple et son utilisation Ă©vidente (par exemple, la fonction de soustraction de valeurs de variable). Essayez de commencer les commentaires Ă titre indicatif («Ouvrir le fichier»). L'utilisation de l'humeur impĂ©rative («Ouvrir un fichier») n'est pas recommandĂ©e. Un commentaire dĂ©crit l'essence d'une fonction, pas comment elle le fait.
Dans le commentaire sur la déclaration de fonction, notez ce qui suit:
- Ce qui est envoyé à l'entrée de la fonction, qui est retourné en conséquence.
- Pour une fonction membre d'une classe: l'instance conserve-t-elle des arguments de référence,
Dois-je libérer de la mémoire? - La fonction alloue-t-elle la mémoire que le code appelant doit supprimer.
- Peut-il y avoir des arguments nullptr.
- La complexité de la fonction (algorithmique).
- Les appels provenant de diffĂ©rents threads sont-ils autorisĂ©s en mĂȘme temps? Et la synchronisation?
Un exemple:
Cependant, ne mùchez pas les choses évidentes.
Lorsque vous documentez des fonctions surchargées, effectuez les principaux changements tenaces par rapport à la fonction d'origine. Et s'il n'y a pas de changement (ce qui arrive souvent), des commentaires supplémentaires ne sont pas du tout nécessaires.
Lorsque vous commentez des constructeurs et des destructeurs, gardez à l'esprit que le lecteur de code connaßt leur objectif. Par conséquent, le commentaire du type "détruit cet objet" est stupide. Vous pouvez décrire ce que le constructeur fait avec les arguments (par exemple, changer la propriété des pointeurs) ou quel type d'opérations de nettoyage le destructeur fait. Si tout est clair, ne commentez rien. En général, les destructeurs n'ont généralement aucun commentaire (lorsqu'ils sont déclarés).
Définition de fonction
S'il y a des astuces dans l'implémentation de la fonction, vous pouvez ajouter un commentaire explicatif à la définition. Vous pouvez y décrire des astuces avec le code, donner un aperçu de toutes les étapes des calculs, expliquer le choix de telle ou telle implémentation (surtout s'il existe de meilleures alternatives). Vous pouvez décrire les principes de la synchronisation du code (ici nous bloquons, mais ici nous emballons le poisson).
Notez que vous
ne devez
pas répéter le commentaire sur la déclaration de la fonction (à partir d'un fichier
.h ou similaire). Il est possible de dĂ©crire briĂšvement ce que fait la fonction, mais l'essentiel devrait ĂȘtre
comment elle le fait.
Commentaires sur les variables
Dans le bon sens, le nom de la variable devrait immédiatement dire de quoi il s'agit et pourquoi, mais dans certains cas, des commentaires supplémentaires sont nécessaires.
Membre de données de classe
Le but de chaque membre de la classe doit ĂȘtre Ă©vident. S'il y a des subtilitĂ©s non Ă©videntes (significations spĂ©ciales, liens avec d'autres membres, restrictions sur la durĂ©e de vie) - tout cela doit ĂȘtre commentĂ©. Cependant, si le type et le nom sont suffisants - vous n'avez pas besoin d'ajouter de commentaires.
En revanche, des descriptions de valeurs spéciales (et non évidentes) (nullptr ou -1) seront utiles. Par exemple:
private:
Variables globales
Toutes les variables globales doivent ĂȘtre commentĂ©es sur leur objectif et (si elles ne sont pas Ă©videntes) pourquoi elles doivent ĂȘtre globales. Par exemple:
Commentaires sur la mise en Ćuvre
Commentez l'implémentation d'une fonction ou d'un algorithme dans le cas de morceaux de code non évidents, intéressants et importants.
Commentaires descriptifs
Les blocs de code complexes ou non standard doivent ĂȘtre prĂ©cĂ©dĂ©s d'un commentaire. Par exemple:
Commentaires de ligne
Il est conseillĂ© de complĂ©ter les lignes de code avec une signification non Ă©vidente par un commentaire (gĂ©nĂ©ralement situĂ© Ă la fin de la ligne) Ce commentaire doit ĂȘtre sĂ©parĂ© du code par 2 espaces. Par exemple:
Notez qu'il y a 2 commentaires sur le bloc de code: l'un décrit ce que fait le code, l'autre rappelle que l'erreur est déjà dans le journal s'il y a un retour de la fonction.
Commentaires sur les arguments de fonction
Lorsque l'affectation d'un argument à une fonction n'est pas évidente, envisagez les options suivantes:
- Si l'argument est une valeur fixe (constante littérale) et cette valeur
utilisĂ© dans diffĂ©rents blocs de code (et il est entendu que cette valeur est la mĂȘme chose)
vous devez crĂ©er une constante et l'utiliser explicitement. - Vous devriez peut-ĂȘtre remplacer l'argument de type bool par
énumération énumération. Cela rendra l'argument autodéterminé. - Pour les fonctions qui utilisent plusieurs options de configuration dans les arguments, vous pouvez
créer une classe (ou structure) distincte qui combine toutes les options. Et passer à fonctionner
une instance de cette classe.
Cette approche présente plusieurs avantages: les options sont indiquées par des noms, ce qui explique
leur but. Le nombre d'arguments dans la fonction est réduit - le code est plus facile à écrire et à lire.
Et si vous devez ajouter plus d'options, vous n'aurez pas Ă modifier l'appel de fonction lui-mĂȘme.
- Au lieu d'expressions complexes dans les arguments, utilisez une variable intermédiaire à laquelle vous affectez une expression.
- En dernier recours, écrivez des commentaires à l'endroit de l'appel pour clarifier le but des arguments.
Considérez les exemples suivants:
Essayons de peigner le code:
ProductOptions options; options.set_precision_decimals(7); options.set_use_cache(ProductOptions::kDontUseCache); const DecimalNumber product = CalculateProduct(values, options, nullptr);
Que ne pas faire
N'expliquez pas l'évidence. En particulier, il n'est pas nécessaire d'expliquer des choses qui sont évidentes pour une personne qui connaßt le C ++. Au lieu de cela, vous pouvez décrire
pourquoi ce code le fait (ou mĂȘme rendre le code auto-descriptif).
Comparez:
Avec ceci:
Le code auto-descriptif ne nécessite aucun commentaire.
Le commentaire sur le code ci-dessus peut ĂȘtre gĂ©nĂ©ralement Ă©vident (et non nĂ©cessaire):
if (!IsAlreadyProcessed(element)) { Process(element); }
Ponctuation, orthographe et grammaire
Faites attention à la ponctuation, l'orthographe et la grammaire: il est beaucoup plus facile de lire des commentaires correctement écrits.
Les commentaires doivent ĂȘtre Ă©crits comme une histoire: avec la disposition correcte des majuscules et des signes de ponctuation. Dans la plupart des cas, des phrases complĂštes sont plus faciles Ă comprendre que des fragments de phrases. Les commentaires courts, tels que ligne par ligne, peuvent ĂȘtre moins formels, mais devraient toujours suivre un style commun.
Bien que l'accent mis par le rĂ©viseur de code sur l'utilisation de virgules au lieu de points-virgules puisse ĂȘtre lĂ©gĂšrement ennuyeux, il est important de maintenir un niveau Ă©levĂ© de lisibilitĂ© et de comprĂ©hensibilitĂ©. Une ponctuation, une orthographe et une grammaire appropriĂ©es y contribuent grandement.
Commentaires TODO
Utilisez les commentaires
TODO pour un code temporaire ou une solution suffisamment bonne (intermédiaire, pas parfaite).
Le commentaire doit inclure la ligne
TODO (toutes les majuscules), suivie du nom, de l'adresse e-mail, de l'ID du défaut ou d'autres informations pour identifier le développeur et la nature du problÚme pour lequel
TODO est écrit. Le but de cette description est de pouvoir trouver plus de détails plus tard.
TODO avec description ne signifie pas que le programmeur spécifié résoudra le problÚme. Par conséquent, lorsque vous créez
TODO , le nom usuel est votre nom.
Si votre
TODO ressemble à «Faisons-le diffĂ©remment Ă l'avenir», indiquez soit une date spĂ©cifique («Corriger en novembre 2005») ou un Ă©vĂ©nement («Supprimer ce code lorsque tous les clients traiteront les requĂȘtes XML»).
Remarque:
- Les liens peuvent conduire à des sections du manuel qui n'ont pas encore été traduites.
- une discussion des questions générales est mieux faite dans la
partie 1. Introduction