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

avec Java Discussion :

Nombre de bloc return dans une methode


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Par défaut Nombre de bloc return dans une methode
    Bonjour,

    J'aimerai avoir l'avis de la communauté concernant le nombre d'instruction return à utiliser dans une méthode.

    Il semble que 2 camps s'affrontent, l'un insistent sur le fait qu'il ne faut qu'une seule instruction return et pour les autres peu importe ca n'a pas grande importance.

    Qu'en pensez vous ?

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par misstmourt Voir le message
    J'aimerai avoir l'avis de la communauté concernant le nombre d'instruction return à utiliser dans une méthode.
    Pourquoi ce débat ? Pour ta culture générale ou dans une situation précise ?

    Je dirais pour ma part qu'en général, on limite à 1 return par méthode. Certains cas particulier font que la syntaxe a plusieurs return peut être valable. En tout cas ce qu'il faut limiter, c'est de devoir galérer dans son code pour retrouver où l'on en sort.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    oui, beaucoup de puristes, en particulier du monde scientifique et/ou enseignant, défendent le return unique. C'est une préconisation de la programmation structurée, et c'est en général une bonne règle à suivre pour éviter les problèmes.

    pour ma part je suis ingénieur, et si la plupart du temps j'évite la multiplication des return pour éviter de galèrer lorsque je dois ajouter un traitement supplémentaire (retrouver tout les returns, les mettre à la fin pour éviter la duplication de code (qui est bien pire pour moi que la multiplication des return),
    mais bon que je me prends pas la peine qu'en j'écris ce genre de truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int getTruc(String string) {
        if ( string==null ) {
            return -1;
        }
        if ( string.length()==0 ) {
           return 0;
        }
        ... mon traitement
        return resultat;
    }
    plutot que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public int getTruc(String string) {
        int resultat;
        if ( string==null ) {
            resultat = -1;
        }
        else if ( string.length()==0 ) {
           resultat = 0;
        }
        else {
        ... mon traitement
        }
        return resultat;
    }
    des fois il faut être souple pour éviter de trop compliquer les méthodes : j'ai des cas, ou j'aurais du ajouter 5 bool"ens pour gérer 5 cas de sortir de boucles, ça commençait a devenir ridicule,

    en fait, je considère en général, qu'un return en cas de condition de sortie (sur erreur, ou valeur étrange), n'est pas totalement proscrit, sinon je préfère avoir un return unique à la fin. si je commence à devoir avoir des return au milieu de la méthode pour des cas fonctionnels, je subdivise ma méthode : la plupart du temps c'est que le problème peut être subdiviser en sous cas excluant (mais ce n'est pas toujours le cas)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Par défaut
    Bonjour,

    Il n'existe pas de réponse précise à cette question.
    Pour y répondre, tu peux te baser sur des normes de codage comme par exemple avec l'outil "PMD" (inclus dans Sonar) qui a deux règles sur le "return" :

    - Une qui demande un seul "return". La description associée de cette règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A method should have only one exit point, and that should be the last statement in the method.
    Par défaut cette règle n'est pas activée.

    - Une autre qui impose par défaut 2 "return" maximum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Restricts return statements to a specified count (default = 2).
    Par contre cette règle est activée par défaut et a un niveau de criticité à "majeur".

    Mathieu

  5. #5
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par Influenza Voir le message
    Par contre cette règle est activée par défaut et a un niveau de criticité à "majeur".
    je serais heureux de voir une justification précise de cette règle... Un demonstration pertinente des méfaits des return multiples serait bienvenue (car je n'en vois pas la raison si ce n'est des raisons historiques venues du fin fond des ages des analyseurs statiques)

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En C, c'était utile, parce qu'avoir un unique return permettait de garantir qu'on pouvait libérer toutes les ressources.

    En Java (ou C++), à cause des exceptions, on ne peut plus avoir cette considération, vu qu'elles introduisent des points de sorties quasiment incontrolables.

    Les garanties de nettoyages sont alors fournies par le try-finally (ou le RAII pour ceux qui font du C++)

    Cela dit, la version "légère" de l'antique restriction serait de n'avoir qu'un seul return nominal, les autres point de sortie étant situés tôt dans le code, et servant à controler les conditions de travail.

    typiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int premiereDifference(String alpha, String beta) {
        if (alpha==null || beta == null) {
            throw new NullPointerException;
        }
        final int max = Math.min(alpha.length(), beta.length());
        if (max == 0) return max;//cas de sortie rapide
     
        //début des calculs
     
        int index = 0;
        //une longue technique de comparaison modifiant index;
        return index;
    }

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Java / JEE
    Inscrit en
    Février 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java / JEE

    Informations forums :
    Inscription : Février 2008
    Messages : 185
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    je serais heureux de voir une justification précise de cette règle... Un demonstration pertinente des méfaits des return multiples serait bienvenue (car je n'en vois pas la raison si ce n'est des raisons historiques venues du fin fond des ages des analyseurs statiques)
    Franchement aucune idée... Je ne faisais que remarquer que sur une installation par défaut de Sonar, avec le plugin PMD, cette règle est activée par défaut...

    Ceci dit, je vois un cas dans lequel je pense qu'il vaudrait mieux éviter le "return" c'est dans une boucle, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (balbla) {
       if (vrai) {
          return ...;
       }
       ...
    }
    Mathieu

    PS : Bon troll le coup du "return"

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/10/2005, 04h35
  2. Nombre de ligne maxi dans une table ACCESS
    Par ygiraudeau dans le forum Access
    Réponses: 2
    Dernier message: 05/09/2005, 17h23
  3. Nombre de valeurs différentes dans une colonne
    Par KrusK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2005, 14h18
  4. URGENT - Nombre d'enregistrements différents dans une table
    Par Jeankiki dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/08/2004, 15h51
  5. [MFC] Passage d'une structure dans une method
    Par KPitN dans le forum MFC
    Réponses: 5
    Dernier message: 18/06/2004, 10h11

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