IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Plusieurs return ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut Plusieurs return ?
    Bonjour,

    Il y a quelques jours, alors que je programmais en cours d'informatique, ma prof m'a dit qu'il ne fallait pas utiliser plusieurs return dans une seule fonction... J'ai appris à programmer sur France-IOI et leurs corrections utilisent souvent plusieurs return... Je lui demande alors pourquoi je ne peux pas utiliser plusieurs return. Je n'ai pas eu de réponses sérieuses ni d'arguments valide, mais un simple : "parce que c'est caca" (mot pour mot)

    Je viens donc ici chercher une réponse concrète faute de trouver mieux dans mon école (IUT).

    Merci

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    C'est la seule réponse que tu auras.

    Çà ne fait pas partie des bonnes pratiques de certains, ça ne dérange pas d'autres. Techniquement rien ne l’empêche. Philosophiquement, tu pourras avoir des arguments du style "Çà fait pas propre", "Çà donne du code qui peut être difficile à maintenir", etc ..

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ça reste plus facile à lire dans certains cas, notamment pour le contrôle des pré-conditions d'une fonction (genre vérifier qu'un pointeur passé en entrée n'est pas nul, etc.).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    C'est purement subjectif, mais je m'y astreins. Un seul return, ça limite le risque de mauvaises surprises à la maintenance. Quand tu commence à avoir plusieurs sorties à ton paragraphe, et que tu dois rajouter des coupures au milieu, tu a vite fait de tout casser.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Disons qu'il convient de séparer l'entrée et la "business logic" de la fonction.
    Dans la fonction elle-même et un langage comme le C, l'absence de return mène inévitablement à du "code boomerang" qui devient aussi illisible que du code avec return multiples quand il dépasse un certain niveau.

    En autorisant les returns sur les préconditions, on économise des niveaux et le code peut rester lisible plus longtemps:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    char* UneFonction(int a, char*b, int*c)
    {
    	char* ret = NULL;
    	if(a < 0) { return NULL; }
    	if(b == NULL) { return NULL; }
    	if(c == NULL) { return NULL; }
     
    	/*Et maintenant, la "business logic", plus de return jusqu'à la fin de la fonction*/
     
    	/*Ici commence le code boomerang*/
    	{
    		FILE *f = fopen("blabla", "r");	
    		if(f != NULL)
    		{
    			char* buffer = malloc(a);
    			if(buffer != NULL)
    			{
    				ret = malloc(strlen(b)+1);
    				if(ret != NULL)
    				{
    					/* bla bla bla */
    				}
    				free(buffer), buffer=NULL;
    			}
    			fclose(f), f=NULL;
    		}
    		return ret;
    	}
    }

    Après, dans des langages supportant les exceptions, on a forcément un flot de contrôle pouvant être "interrompu", donc un return de plus ou de moins...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    SI on a des fonctions de trois pages je comprends qu'on préfère s'abstenir d'introduire des return : cela évite d'avoir sans cesse à devoir vérifier le reste de la fonction.

    Mais si on a des fonctions courtes, de dix lignes environ, comme le recommandent les bonnes pratiques actuelles, il n'y a aucun problème à utiliser plusieurs return, c'est même tout à fait recommandé si cela peut limiter les imbrications.

Discussions similaires

  1. faire plusieurs return avec des vectors
    Par mazertys17 dans le forum C++
    Réponses: 10
    Dernier message: 13/11/2014, 16h57
  2. Plusieurs return pour une fonction
    Par troumad dans le forum Débuter
    Réponses: 33
    Dernier message: 29/11/2011, 17h34
  3. Plusieurs return dans une fonction
    Par ninikkhuet dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2010, 12h45
  4. plusieurs return dans une seule fonction?
    Par grodashe dans le forum Débuter
    Réponses: 4
    Dernier message: 01/01/2010, 17h09
  5. plusieurs return dans une fonction?
    Par contremaitre dans le forum C
    Réponses: 27
    Dernier message: 21/02/2008, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo