cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 3 juil. 2010 à 13:51
Il ne faut pas le prendre mal. En postant dans la section "source", tu exposes ton code à la critique. Cette section a vocation à présenter des codes qui sont soit techniquement intéressants (et donc techniquement, à défaut d'être irréprochable, au moins très "carré"), soit à présenter quelque chose de pédagogique.
Ici tu entres dans la première catégorie. Le souci est que tu fais beaucoup de chose de la mauvaise manière. Il faut savoir qu'un débutant qui voit une source a beaucoup de mal à différencier les bonnes pratique, des mauvaises. S'il prend ta source comme référence, ce ne sera pas à son avantage.
Pour simplifier, on est plus sévère sur les codes postés dans cette section, que sur le forum.
Néanmoins, rien ne t'empêche de mettre à jour ton code. N'hésite pas à demander de l'aide, c'est toujours avec plaisir que les membres de cette communauté t'aideront.
BOLLOTD
Messages postés2Date d'inscriptionmardi 2 septembre 2008StatutMembreDernière intervention31 octobre 2015 3 juil. 2010 à 00:45
Je ne suis pas un pro comme vous. Je débute en c++ et je ne suis pas informaticien de profession. Il y a longtemps j'ai programmé en fortran. Je tiendrais compte de vos conseils mais ce n'est pas dit de façon très sympa. Merci quand même.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 2 juil. 2010 à 11:26
C'est un code que je ne recommande pas.
Plusieurs remarques:
- Le titre est incorrecte puisque ton code n'a *absolument* rien à voir avec une quelconque base de données. C'est juste liste chaînées qui est gardée en mémoire !
- Tu fais du C++, mais tu n'en utilises pas les avantages, tu aurais pu coder directement en C, ton code n'aurait pratiquement pas changé.
Au niveau techniques:
- N'utilise jamais using namespace std, *surtout* dans header ! Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace - Préfère 0 à NULL. Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp - Un seul header par classe, on ne met pas plusieurs définitions de classe dans un seul header !
- Les variables globales sont à proscrire totalement. Si tu as des variables globales, pose toi des questions.
- Utilise des std::string, au lieu de faire du char*/char[] partout !
- La liste chaînée aurait pu être aisément remplacé par une std::list
- Il est inutile de faire un "return;" à la fin d'une fonction retournant void.
- L'encapsulation des données ne sert strictement à rien, si tu mets toutes les méthodes amis de tes classes (friend). L'utilisation du mot clé friend doit être rarissime, et doit se justifier. Ici il est utilisé n'importe comment.
- Beaucoup de fonction ne sont pas optimisées (je pense par exemple à "enleve_les_blancs" qui fait des copies inutiles).
- Les fonctions sont *trop* grosses. Une bonne fonction n'excède généralement pas une trentaine de ligne.
- Beaucoup de répétition ! Beaucoup de code aurait pu être factorisé. A la place tu as fait énormément de copier coller.
Enfin, cerise sur le gâteau, le code ne compile pas chez moi (normal, tu n'as pas pris la peine d'inclure les headers nécessaires pour strcpy et strcmp, et entete2.h n'existe pas !), et j'ai énormément de warnings (tu n'as pas du compiler en activant l'affichage de conseil).
Le code ne compilant pas, je n'ai pas vérifié les fuites mémoires, mais je suis à peu près sur que sur ce point aussi, il y a des problèmes.
J'oublie sûrement plein de remarques, mais j'ai du en parcourir la majorité.
3 juil. 2010 à 13:51
Ici tu entres dans la première catégorie. Le souci est que tu fais beaucoup de chose de la mauvaise manière. Il faut savoir qu'un débutant qui voit une source a beaucoup de mal à différencier les bonnes pratique, des mauvaises. S'il prend ta source comme référence, ce ne sera pas à son avantage.
Pour simplifier, on est plus sévère sur les codes postés dans cette section, que sur le forum.
Néanmoins, rien ne t'empêche de mettre à jour ton code. N'hésite pas à demander de l'aide, c'est toujours avec plaisir que les membres de cette communauté t'aideront.
3 juil. 2010 à 00:45
2 juil. 2010 à 11:26
Plusieurs remarques:
- Le titre est incorrecte puisque ton code n'a *absolument* rien à voir avec une quelconque base de données. C'est juste liste chaînées qui est gardée en mémoire !
- Tu fais du C++, mais tu n'en utilises pas les avantages, tu aurais pu coder directement en C, ton code n'aurait pratiquement pas changé.
Au niveau techniques:
- N'utilise jamais using namespace std, *surtout* dans header ! Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
- Préfère 0 à NULL. Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/null-en-cpp
- Un seul header par classe, on ne met pas plusieurs définitions de classe dans un seul header !
- Les variables globales sont à proscrire totalement. Si tu as des variables globales, pose toi des questions.
- Utilise des std::string, au lieu de faire du char*/char[] partout !
- La liste chaînée aurait pu être aisément remplacé par une std::list
- Il est inutile de faire un "return;" à la fin d'une fonction retournant void.
- L'encapsulation des données ne sert strictement à rien, si tu mets toutes les méthodes amis de tes classes (friend). L'utilisation du mot clé friend doit être rarissime, et doit se justifier. Ici il est utilisé n'importe comment.
- Beaucoup de fonction ne sont pas optimisées (je pense par exemple à "enleve_les_blancs" qui fait des copies inutiles).
- Les fonctions sont *trop* grosses. Une bonne fonction n'excède généralement pas une trentaine de ligne.
- Beaucoup de répétition ! Beaucoup de code aurait pu être factorisé. A la place tu as fait énormément de copier coller.
Enfin, cerise sur le gâteau, le code ne compile pas chez moi (normal, tu n'as pas pris la peine d'inclure les headers nécessaires pour strcpy et strcmp, et entete2.h n'existe pas !), et j'ai énormément de warnings (tu n'as pas du compiler en activant l'affichage de conseil).
Le code ne compilant pas, je n'ai pas vérifié les fuites mémoires, mais je suis à peu près sur que sur ce point aussi, il y a des problèmes.
J'oublie sûrement plein de remarques, mais j'ai du en parcourir la majorité.