Tu as parlé (hop, un biais rapide) d'un code sans commentaire à un moment. J'apprécie, je fais pareil: raisons techniques (commentaire désynchronisés, ce qui inclue les doxycomment).
Pour raccrocher mon wagon à ma quote, au sujet des scope, j'ai énormément de mal à en avoir au milieu d'une fonction (en dehors des test/boucles, obvious)... puisque la moyenne de taille de mes fonctions est, je dirais, a peu près 15-20 lignes.
Pour ce qui est du nombre d'arguments qu'elles prennent (hop, je rebiaise) j'ai souvent constaté qu'il soit possible dans ces cas-là qu'un objet soit caché dans mon objet.
a :: moi non plus
b :: je vais utiliser un argument d'autorité (je sais, pas bien): tu préfères std::string::size(void)const ou std::string::getSize(void)const ? Personnellement, il me semble évident que "size" et "getSize" font strictement la même chose. En C++, les arguments et le const font partie du prototype. "throw()" aussi, d'ailleurs (ah, oui, pardon... noexcept() en C++11, ce me semble.)
c :: Franchement... l'auto-complétion, c'est une raison bassement technique. En plus, je n'en connaît aucune qui tienne réellement la route. Pour finir, quand tes classes sont assez petites, la liste est restreinte. Sauf si tu as une généalogie digne d'un hobbit forcément (vu qu'en ce moment ils sont à la mode... même si je ne suis pas sûr que la plupart des gens saisirons l'ensemble de l'image, clin d'oeil de rôliste).
d :: voire le point b: ne pas oublier la moitié du prototype. Si tu ne lui passes rien et que ça renvoie une valeur, il semble évident que tu souhaites récupérer quelque chose. Pour les pointsil n'y a aucune différence. En quoi est-il important que le contractant (le client, l'utilisateur, l'appelant, ce que tu veux) sache que tu construit une donnée à partir de l'état interne, ou que cette donnée soit déjà stockée?Obtenir un "name"? [...] Convertir les données de l'objet en "name" ?
C'est un détail d'implémentation qui ne regarde que l'expert, c'est à dire l'objet lui-même.
e :: on peut citer, par exemple, le fait que ton getter mentiras si tu considères que stocker une donnée deviens trop coûteux par rapport à la calculer les rares fois ou un client l'utilise, ce qui reprend ma remarque en d. La manière de procéder, les mécanismes internes, doivent rester cachés, afin d'avoir un code plus modulable et évolutif. C'est une question de flemme dans mon cas.
Il me semble que tu citais dans les erreurs (bien vu, d'ailleurs), le problème du '\0' de fin de chaîne.
L'index 0 est bel et bien un facteur d'erreur important, selon moi. Ca m'arrive encore, d'ailleurs, quand j'utilise un langage différent: certains considèrent qu'on commence à 1. Ca m'arrive encore quand je dois configurer du matériel qui n'est pas d'accord avec le logiciel (récemment: une saleté de switch avec nagios... il y avais un décalage de 1, et je l'ai appliqué dans le mauvais sens... shame on me).
Pardonnes moi de ne reprendre que cet exemple.
Je crois qu'il à le même problème que moi, en fait, c'est à dire ne pas apprécier d'appliquer un principe sans le comprendre parfaitement
Que notre approche soit bassement pratique ou noblement (oui, je charrie) conceptuelle ne change au final rien au fait que le code est propre, et selon le côté que l'on prend, on applique réellement ces principes, ou ceux-ci deviennent la conséquence de nos habitudes et des leçons tirées des codes précédents.
Toi-même as admis, il me semble, t'être ramassé avant d'avoir découvert ces principes sur un forum comme quoi, l'expérience est nécessaire pour les appliquer (que ce soit pour les comprendre ou pour accepter de les utiliser, selon les gens... sauf s'il y a des moutons qui font sans comprendre et acceptent tout, mais pour un dev, ça relève d'un sacré problème s'il agit comme ça, selon moi)
Pourquoi?
En quoi l'objet est-il constamment plus approprié que l'impératif?
Perso, il m'arrive de faire des gadgets. Quand je les commence, je commence par la fonction main. J'ajoute des fonctions. Quand elles manipulent les mêmes trucs et que j'ai la flemme de lire tant de lignes, au fil des ajouts, j'en fais une classe.
Pour ces gadget, je pars donc bel et bien d'un bête truc impératif...
Et si les classes avaient déjà existé, je me serai fait un plaisir de rester au niveau impératif, d'ailleurs.
D'ailleurs (attention, troll en approche) c'est une des raisons pour lesquelles je n'aime pas les langages purs OO: ils sont menteurs et trompeurs. Il suffit de voir le bidouillage crado autour de la fonction main: une classe programme, qui ne contiens souvent que la simple méthode statique main!
J'ai pas encore cité de noms, mais tout le monde à compris que je parle au moins de C# et Java, même si je restreint pas mon dégoût (que je surpasse sans problème s'il me faut manger ) pour ce type de mentalités "tout objet". Le pire, c'est que dans ces machins, tout le mondefornique avec tout le mondehérite du grand patriarche, ce qui fait qu'on peut caster une string en objet, puis l'objet en carré!
Ce sont ces quelques raisons, ainsi que les lignes de 200 caractères de large (celle-ci étant la première à m'avoir dégoûté pour java. Pour C#, c'était: nullptr.zero() ou un truc dans le genre), qui font que je préfère de très loin C++ malgré sa librairie restreinte.
Partager