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?
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 ?
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
???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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.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
Jveux dire, dans ce cas par exemple
est-ce si grave?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 globaleEnvoyé 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.Envoyé par Gruik
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.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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 dramatiqueEnvoyé par Jean-Marc.Bourguet
Okay, je m'y attele ce soirEnvoyé 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?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...
Partager