|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 749 ![]() |
Bonjour,
Je voulais connaitre un peu pour vous les bonnes pratiques et conventions lorqu'on commente son code C++, ce qui pour vous est absolument à faire et à éviter. J'aimerai aussi avoir votre avis sur deux choses: 1/ Doit-on absolument séparer prototype (headers) et implémentation (.cpp), ou peut implémenter par exemple les constructeurs et getters/setters dans le .h pour "alléger" le .cpp? 2/ Comment bien commenter un getter ou setter sans mettre un commentaire inutile du genre: Code :
|
||
|
|
11
|
|
|
#2 | ||
![]() ![]() ![]() |
Bonjour,
Pour commenter j'utilise des commentaire doxygen : Code :
Après, on ne devrait pas à avoir à mettre des commentaires dans le code (sauf cas exceptionnel) car ceci signifierais que le code n'est pas assez explicite. Si tu veux "alléger" le .cpp c'est peut être que ta classe a trop de responsabilité, et il vaut mieux dans ce cas la faire plusieurs classes. On ne met l'implémentation dans les .h uniquement quand on veut inliner des méthodes ou fonctions ou quand on utilise des templates.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
20
|
|
|
#3 | ||||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 749 ![]() |
Intéressant, tu dis que le code en soit necessite peu voire pas de commentaire, j'ai toujours cru au contraire qu'il fallait "tout" commenter.
Mis à part les inline et template, pas de code (constructeurs par exemple) dans les .h si je comprends bien. Par contre, pour en revenir aux commentaires, doit-on commenter une fonctions deux fois (une fois son prototype dans le .h et une seconde fois dans .cpp) ou juste dans le .h suffit? .h Code :
Code :
|
||||
|
|
01
|
|
|
#4 | |||
![]() ![]() ![]() |
Citation:
Code :
Par contre les commentaires doxygen permettent de générer une documentation qui permet à l'utilisateur de ne pas à avoir à fouiller dans le code pour pouvoir l'utiliser. Une seule fois suffit mais certaines personnes préfèrent les mettre dans le .cpp pour rendre la compilation plus rapide.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|||
|
|
01
|
|
|
#5 |
|
Membre éclairé
![]() |
Pour ma part on ne commente que le header car c'est bel et bien ce fichier qui définit une classe.
Un autre programmeur va utiliser ta classe, il va simplement regarder le header pour connaître l'objet et non l'implémentation qu'il y a derrière. C'est de l'encapsulation. Quand tu utilises une librairies, tu ne regardes pas le code source (sauf cas exceptionnel) ? Les commentaires dans l'implémentation doivent être exceptionnel du genre : // TODO // FIXME // Could be better ... Mais uniquement pour toi /ou un autre dev qui devrait changer ton implémentation. Pour les getters, je ne met point de code sauf s'il y a un quelconque traitement dedans.
__________________
Kinaesthetic project
|
|
10
|
|
|
#6 | ||||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 749 ![]() |
Citation:
Citation:
En gros, un getter devrait (ou doit si on est stricte) ressembler à cela: Code :
|
||||
|
|
01
|
|
|
#7 | |||
![]() ![]() ![]() |
Citation:
Même si je n'en suis pas très fan, le fait de mettre les commentaires dans le .cpp peut parfois être un gain de temps non-négligeable dans de très gros projets, en effet dès qu'on va modifier un commentaire dans un header, on va devoir recompiller tous les .cpp incluant ce header. Citation:
Par contre une chose à ne jamais faire : Ne mettre presque aucun commentaire sauf quelques jeux de mots avec getter et setter. ça ne fait pas tellement rire quand on reprend le code par la suite. ![]() Citation:
L'utilisateur n'est pas censé savoir que la variable existe tel quel ou non.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|||
|
|
01
|
|
|
#8 | |
|
Membre éclairé
![]() |
Citation:
__________________
Kinaesthetic project
|
|
|
00
|
|
|
#9 | |
![]() ![]() ![]() |
Citation:
Sinon je vois mal comment tu gère cela au niveau du makefile.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
01
|
|
|
#10 | |||||||||
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 749 ![]() |
Citation:
Si on a un besoin de traitement sur un membre, on fait une fonction pour cela, même si c'est un tout petit traitement. Et parfois, appeller une fonction getSomething() alors qu'elle fait plus que juste renvoyer la valeur peut être trompeur, j'en ai fait récemment l'expérience, exemple: Code :
Code :
Code :
Alors tu me diras qu'il suffit de modifier en: Code :
|
|||||||||
|
|
01
|
|
|
#11 | ||
![]() ![]() ![]() |
Si tes getter et tes setter ne font que :
Code :
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
21
|
|
|
#12 |
|
Membre éprouvé
![]() Inscription : avril 2007 Messages : 749 ![]() |
Ca me trouble beaucoup ce que tu me dis là, car je m'efforce à ce que mes getters et setters ressemblent à ton exemple, pensant bien faire en faisant cela
.
|
|
|
01
|
|
|
#13 | |||
![]() ![]() ![]() |
Citation:
Code :
Si on met quand même un setter et un getter au lieu de mettre la variable en public, c'est pour rendre le code maintenable, en effet si un jour on souhaite rajouter des traitements lors du getter/setter, on aura juste la "cuisine interne" à modifier sans avoir à modifier le reste du code (ie tous les appels aux getter et setter).
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|||
|
|
04
|
|
|
#14 | |||
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 626 ![]() |
Citation:
Si dans le future tu veux ajouter des traitements ou verifications alors tu seras bien ennuye d'avoir a changer tout le code qui utilise ce type pour ajouter des paranetheres pour acceter aux fonctions au lieu des membres. |
|||
|
01
|
|
|
#15 | |
|
Membre éclairé
![]() |
Citation:
Comme dit Neckara, si tes getter et setter ne font que ça, met ta variable en public ^^
__________________
Kinaesthetic project
|
|
|
11
|
|
|
#16 | ||
![]() ![]() ![]() |
Je pense que j'ai été mal compris
![]() Les getters/setters du type : Code :
Mais si dès qu'on rajoute des traitements/vérification, on renomme les méthodes (ie au lieu de mettre getMachin() on met machin() ) on perd cette utilité. De là mettre la variable en public revient exactement au même sauf qu'on gagne deux appels de méthodes (sauf si inline). Mais il vaut mieux utiliser des getter/setter plutôt que de mettre un attribut en public justement pour des raisons de maintenabilité à condition bien sûr de ne pas renommer les getter/setter à chaque modification. Pour ne pas perdre de performances, on peut inliner ces getter/setter.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
12
|
|
|
#17 | |||||||||
![]() ![]() Cyrille Network programmer Inscription : juin 2010 Messages : 1 570 ![]() |
Citation:
Si rien n'est précisé, aucune conclusion n'est possible, ni même la supposition qu'il s'agit de Kg. |
|||||||||
|
|
01
|
|
|
#18 | ||||||
![]() ![]() |
Salut,
Pour ce qui est des commentaires, je ferai la distinction entre les commentaires qui permettent la génération de documentation automatique et les autre Pour ce qui est des commentaires de génération automatique de documentation ("doxygen", par exemple
A priori, le code ne devrait pas en avoir besoin et devrait se suffire à lui même, mais, si commentaire il y a, il devraient se limiter à décrire le but poursuivi par la partie du code à laquelle ils se rapportent, plutôt que d'expliquer ce que fait le code En effet, si l'algorithme est à ce point compliqué qu'il faut en arriver à le commenter, le fait que le commentaire indique ce qui est espéré rendra les commentaires beaucoup plus stables et permettront, le cas échéant, de se rendre compte que le code ne fait pas ce qu'il devrait (et donc, rendra la correction sans doute plus facile). Enfin, concernant le débat sur les accesseurs et mutateurs. J'avouerai ne pas avoir tout lu, mais: A priori, la loi demeter nous inciterait à éviter les accesseurs pour la simple raison qu'ils nous obligent bien souvent à connaitre "ce que la classe utilise en interne" pour pouvoir travailler avec elle. En ce qui concerne les mutateurs, c'est encore pire : Bien souvent, la mise à disposition d'un mutateurs se traduit, au final, par un code proche de Code :
Il est alors beaucoup plus simple, efficace et "error prone" de fournir directement un comportement dont le nom est adapté, prenant des données "simples" (on va dire : des types primitifs et des chaines de caractères éventuellement, même si cela peut parraitre excessif Cela permettrait, en outre, d'éviter l'impression "d'immédiateté" des mutateurs en laissant penser qu'il peut s'agir d'une action "prenant un temps relativement long". Par exemple, si l'on a une classe qui se positionne grace à un point 2 dimensions, au lieu d'avoir un code proche de Code :
Code :
__________________
en bas de page
|
||||||
|
|
31
|
|
|
#19 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : août 2004 Messages : 3 695 ![]() |
Concernant les commentaires dans le code (dans le .cpp), je trouve que les développeurs n'en mettent pas assez. C'est un avis personnel bien sûr.
Je préfère, en effet, écrire les "notes de developpement" dans le code plutôt que dans l'en-tête, car je préfère que l'en-tête et la doc générée automatiquement n'entre pas dans les détails d'implémentation. Par exemple, un fonction implémente un algorithme connu mais y ajoute une légère variation selon les besoins du contexte. Cette modification aura, AMHA, bien souvent sa place dans le code source, car elle ne concernera que la personne qui devra faire des modifications. Les petites astuces d'implémentation également doivent être, AMHA, commentées dans l'implémentation elle-même. etc. |
|
|
01
|
|
|
#20 | |||
|
Membre habitué
![]() ![]() Lionel TidjonEtudiant Polytechnicien Inscription : juillet 2012 Messages : 53 ![]() |
Citation:
|
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com