Demandons ici des explications sur l'echelle de gorettitude de Emdel.
http://emmanuel-delahaye.developpez.com/goret.htm
Force 8 "Plus d'un return par fonction"
Mais pourquoi?
Version imprimable
Demandons ici des explications sur l'echelle de gorettitude de Emdel.
http://emmanuel-delahaye.developpez.com/goret.htm
Force 8 "Plus d'un return par fonction"
Mais pourquoi?
Il faut plus d'un return par fonction ou il en faut un seul ?
Il en faut qu'un
c'est vrai ca...Citation:
Envoyé par Gruik
ben je vois la philosophie du truc si t'arrete pas de sortir de ta fonction avec des returns c'est pas "naturelle" comme déroulement. Enfin c'est ce que je pense !!
On ma toujours dis que l'utilisation des fonctions goto-like c'est pas le top
???Citation:
Envoyé par gnto
Donne un exemple...
Parceque si c'est une fonction de test...
Oui mais pour une fonction de ce type
Je ne vois pas en quoi ca fait goret (surtout Force 8).Code:
1
2
3
4
5
6
7
8
9
10
11
12 int fonction(void) { char *buffer = NULL; buffer = malloc(50); if(buffer == NULL) { printf("Erreur allocation !\n"); return -1; } [...]; return 0; }
Il est vrai que l'on peux faire comme ca.
Mais ca implique de mettre tout le code de la fonction dans le if.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 int fonction(void) { char *buffer = NULL; int ret = 0; buffer = malloc(50); if(buffer != NULL) { [...] } else { printf("Erreur allocation !\n"); ret = -1; } return ret; }
Aprés cette echelle de goret est relative. Moi personnellement je prefere la 2eme fonctions de skyrunner.
Si la difference est significative, c'est que les ... contiennent trop de choses.Citation:
Envoyé par gnto
(Note, dans la liste d'Emmanuel, je n'arrive pas a savoir si force 10 est mieux ou pire que force 1).
A+
--
Jean-Marc
10 c'est le pire
Jveux dire, dans ce cas par exemple
est-ce si grave?Code:
1
2
3
4
5
6
7
8 int func (const char * search) { int k; for (k = 0; k < TAB_NB_ELT; k++) if (!strcmp(search, my_tab[k].str)) return k; return -1; }
Au fait, je pensais faire un gros topic sur ce forum sur "comment bien programmer en C" où tout le monde pourrait participer et on discuterait pour se mettre d'accord sur certains points.
Ca periphraserait un peu l'echelle de goret mais ça detaillerait le pourquoi du comment, le tout bien présenté avec des couleurs et des sections.
Bien ou pas bien?
Yeah en plus la tu as couplé avec une variable globale :aie: :aie:Citation:
Envoyé par Gruik
Je ne trouve pas ca grave, mais c'est vrai que l'on peux toujours s'en sortir autrement.
Hum je sens que cette discussion a un bel avenir devant elle. :aie:Code:
1
2
3
4
5
6
7
8
9
10
11 int func (const char * search, const struct mystruct *my_tab) { int k; int ret = -1; for (k = 0; k < TAB_NB_ELT; k++) if (!strcmp(search, my_tab[k].str)) { ret = k; break; } return ret; }
Je suis pour, on pourrait deja reprendre des bouts du topic sur le Caymal.Citation:
Envoyé par Gruik
Citation:
Envoyé par Gruik
Ah, ne pas indenter -- perso, a ce niveau de non respect des lecteurs je ne prends generalement meme pas la peine de repondre sur Internet, et je n'ai jamais vu dans ma vie professionnelle ou j'ai pourtant vu bien des choses, mais au niveau indentation, le pire que j'ai vu c'est l'utilisation d'un melange de tabulation et d'espaces ne fonctionnant correctement qu'avec une tabulation mise a 5 caracteres pour une partie du code et a 8 caracteres pour une autre dans un fichier qu'on aurait mieux fait de scinder avant que je ne le fasse -- c'est mieux que de tout mettre dans le main(), ce qui m'est deja arrive pour des petits programmes oneshot, et qui arrive sans probleme dans des exercices ou dans du code reduit pour mettre en evidence un probleme. En fait, je ne vois pas de necessite de faire une difference entre main et les autres fonctions, pour lesquelles on a "Fonction de plus d'une page visible" qui est du force 5 d'apres Emmanuel...
Restons sur le probleme du SESE (Single Entry Single Exit) et passons sur la variable globale et le fait que le tableau devrait peut-etre etre trie ou remplace par une table de hachage.Citation:
Envoyé par Gruik
Je ne suis pas un fanatique du SESE meme si j'ai tendance a ecrire du code qui respecte cette contrainte, mais pas au pris d'introduction d'une variable ou de complication d'expression de conditions comme ce le serait ici s'il n'y avait l'alternative subtilement differente:
Dans du code qui n'est pas SESE, j'aime bien que le code respecte la symetrie et donc qu'il y ait un return soit dans chaque branche du if ou du switch, soit dans aucune.Code:
1
2
3
4
5
6
7
8
9 int func(char const* niddle) { int k = TAB_NB_ELT - 1; while (k >= 0 && strcmp(niddle, my_tab[k].str) != 0) { --k; } return k; }
Ouais, ya des trucs en force élevée que je considère comme pas si dramatiqueCitation:
Envoyé par Jean-Marc.Bourguet
Okay, je m'y attele ce soirCitation:
Envoyé par Skyrunner
Donc, si ya pas de rajout de variable et si ça complexifie pas trop, on se doit d'avoir qu'un seul return?Citation:
Envoyé par Jean-Marc.Bourguet
Force 8 : Passage d'une structure en paramètre...
Non pas que je l'ai deja fait (quoique...), il est vrai qu'il est preferable de passer un pointeur sur la structure. Mais Force 8, ouah...
C'est vrai ça, si la structure contient un char * et un entier, est si grave de les recopier?
Mince alors, tu m'as devancé. Je voulais également lancé un topic sur cette echelle suite à une discussion avec Emdel concernant les variables statique.Citation:
Envoyé par Gruik
Très bonne initiative Gruik...
L'important c'est que ca reste lisible et qu'il soit facile de raisonner sur le code. Cette derniere contrainte a tendance a favoriser le code SESE.Citation:
Envoyé par Gruik
C'est quelque chose de tres proche du "pas de goto" et entraine parfois une attitude pas tres rationnelles. Certains sont fanatiques et rejettent d'office tout code que ne le fait pas, quitte a favoriser un code qui me semble plus complexe. D'autres, dont je suis proche, considerent que c'est souvent un signe qu'il y a un manque de structuration mais ne rejettent pas a priori cette regle. D'autres enfin la considerent comme stupide.
pour moi le return c'est presque le goto. On casse le déroulement de la fonction pour ne pas effectuer la suite ?
les breaks existe-t'il en algorithmie ?
Ok je comprends bien. Je me demandais juste si yavait des cas où on pouvait avoir plusieurs return.
Si on veut faire bien, qu'un seul return.
Maintenant, en Force 4 : "Usage de TAB au lieu de SPACE"
?
J'ai plutot tendance à configurer mon editeur pour qu'il mette des tabulations reelles au lieu des espaces pour justement qu'il yait pas de probleme si un autre n'utilise pas le meme nombre d'espaces pour son indentation
Ben alors je suis fiers d'etre en force 4 :lol:Citation:
Envoyé par Gruik
Vu la taille des ecrans aujourdhui on peut bien mettre des tabs, pour moi c plus espacé donc c plus lisible.
est ce que la non optimisation est une force de gorétisation
Mettre un int au lieu d'un short c'est pas force 1 ?
Non au contraire, mettre des short au lieu des int est goret si ta variable est algorithmiquement considérée comme un entier.
Je pense qu'il faut utiliser short à la place de int que si l'economie de mémoire est significative, ex un tableau enorme de structures contenant des entiers
Le probleme des tabulations est que generalement, ceux qui les utilisent pour l'indentation le font de sorte que le code soit beau qu'avec une taille de tabulation: la leur qui est differente de 8... Il y a bien moyen d'utiliser convenablement les tabulations pour indenter et les espaces pour aligner -- donc changer la taille de la tabulation n'a pas d'effet sur la beaute du code. Certains arguent pour cette methode; je la connais, mais je n'ai jamais vu quelqu'un l'appliquer de maniere constante car elle n'est pas automatique et necessite de distinguer l'indentation de l'alignement.Citation:
Envoyé par Gruik
Citation:
Envoyé par Gruik
La vrai question est "pourquoi pas en force 9 ou 10" ? Parce que dans des cas tordus ça peut permettre de gagner quelque nanosecondes... Je le passerais bien en 9 quand même...
- Pour respecter les principes de la programmation structurée (ben oui, le C, c'est pas le BASIC...)
- Pour être sûr de bien faire ce qu'on a à faire (les sorties de secours, c'est le meilleur moyen d'oublier une ressource...
- Pour avoir du code lisible et maintenable
- Pour pouvoir mettre un point d'arrêt à un endroit connu
Genre, pour aligner ceci?
Code:
1
2
3
4 if (condition 1 && condition 2 && condition 3)
Et ? C'est grave ?Citation:
Envoyé par Skyrunner
Je supose qu'il s'agit de l'utilisation des tabulations. Pour une utilisation correcte, ilCitation:
Envoyé par Gruik
faut que la premiere ligne n'ait que des tabulations avant le if, les deux autres le meme nombre de tabulations suivies par 4 espaces.
En C, ça existe :Citation:
Envoyé par gnto
Mais je ne vais pas créer un niveau 11 pour ça...Code:
1
2
3
4
5
6 do { break; } while (0);
OK. Je vais expliquer que mon echelle inclue le respect de la programmation structurée. Ca fera le ménage dans les questions.
Pour moi, c'est tellement évident, que je ne peux pas envisager de coder autrement...
*** TROLL ALERT ***Citation:
Envoyé par Jean-Marc.Bourguet
Vous battez pas les djeunzCitation:
Envoyé par Emmanuel Delahaye
j'ai envie de dire qui seme le vent récolte la tempête
Tu peux y ajouter les typedef tordus :Citation:
Envoyé par Emmanuel Delahaye
Code:typedef char UINT64
8O 8O ? Si je demande à l'éditeur de mettre 4 espaces, il y aura 4 espaces dans le fichier. Point. Il n'y aura pas de TAB et le code aura strictement la présentation que j'ai voulue quelque soit l'éditeur ou l'imprimante ou le mode <pre></pre> en HTML ou la fenêtre du debugger. Portabilité maximale. C'est le but.Citation:
Envoyé par Gruik
Les TABs peuvent être interprétées différements selon les éditeurs, imprimantes etc. Pas portable.-> Force 4 (je suis gentil..., mais ça ne me dérange pas, car de toutes façons, je repasse tout à l'indenteur qui met le code au carré...indentation de 3 espaces etc.)
Ok, parce que j'ai une fonctionnalité dans mon editeur (PSPad) c'est qu'on peut lui dire si les tabulations insérées doivent être converties en espace ou rester en tabs, et si elles restent en tabs on peut lui dire combiein de caracteres elles doivent prendre
Donc j'ai pensé que la tabulation était mieux qu'un nombre fixe d'espace qd on travaille à plusieurs