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

Java Discussion :

Bonnes pratique : ne rien retourner ou retourner un objet ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Developper
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Developper

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut Bonnes pratique : ne rien retourner ou retourner un objet ?
    Bonjour,

    J'aimerai savoir ce qui est le mieux (au sens plus propre, performant, intelligent, etc...) de faire pour ce cas de figure :


    par exemple, on prend une classe Point, on veux faire une methode translater()
    est ce que le mieux est que la methode ne retourne rien (void) ou retourne le point translaté ?

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void translater(double x, double y){
          this.x += x;
          this.y += y;
    }
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Point translater(double x, double y){
          this.x += x;
          this.y += y;
          return this;
    }
    Est ce que "return this" est correct ?
    Pour moi, l'avantage de la seconde solution, c'est qu'on peut dans la methode appelante, enchainer les méthodes sur l'objet, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monPoint.translater(1,3).afficheCoordonnees();
    Alors que dans la première solution, on est obligé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monPoint.translater(1,3);
    monPoint.afficheCoordonnees();
    Mais qu'est ce qu'est le mieux ? Ca dépend de ce qu'on veux faire ? Ce que je fais est complètement faux ?

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Webmarketer
    Inscrit en
    Octobre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Octobre 2008
    Messages : 191
    Par défaut
    moi personnellement, me je m'embeterais pas avec un return mais bon c'est peut etre une erreur...
    au moins dans tes coordonnées tu fais un lien direct vers la variable c'est plus simple et ça evite les confusions. Par contre si ton code est long tu peux peut etre t'embrouiller. enfin bon, je te repond ça parce que y a pas encore de réponse sur ton post sinon j'aurais laissé les plus expérimentés.
    ++

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmarketer
    Inscrit en
    Octobre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmarketer

    Informations forums :
    Inscription : Octobre 2008
    Messages : 191
    Par défaut
    Citation Envoyé par kavdo34 Voir le message
    moi personnellement, je m'embeterais pas avec un return mais bon c'est peut etre une erreur...
    au moins dans tes coordonnées tu fais un lien direct vers la variable c'est plus simple et ça evite les confusions. Par contre si ton code est long tu peux peut etre t'embrouiller. enfin bon, je te repond ça parce que y a pas encore de réponse sur ton post sinon j'aurais laissé les plus expérimentés.
    ++

  4. #4
    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
    bien sûr ça dépend de ce que tu veux faire, mais souvent ceci n'est pas mal non plus (remarque que j'ai changé le nom car j'ai changé la sémantique):
    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
     
    class Position {
         final int x ;
          final int y ;
     
         public Position (int x , int y) {
             this.x = x ;
             this.y = y ;
        }
     
       public Position suivantTranslation (int x, int y){
          return new Position (this.x + x, this.y + y );
       }
     
    }

  5. #5
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    bien sûr ça dépend de ce que tu veux faire, mais souvent ceci n'est pas mal non plus (remarque que j'ai changé le nom car j'ai changé la sémantique):
    Personnellement, je ne suis pas fan de cette syntaxe.

    Si on n'y fait pas attention, on a vite fait d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Position pos = new Position(0,0);
    pos.suivantTranslation(2,2);
    Et de croire que l'objet "pos" a été translaté.

    Par ailleurs, ça multiplie les instances de la classe, ce qui n'est pas forcément le but souhaité.

    Je sais que c'est le comportement des classes Java "final" (dont String est certainement le cas le plus emblématique) mais je préfère l'utiliser le moins possible dans d'autres contextes. Maintenant, ça reste relatif et ça dépend du besoin que l'on a derrière...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  6. #6
    Membre confirmé
    Profil pro
    Developper
    Inscrit en
    Juin 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Developper

    Informations forums :
    Inscription : Juin 2008
    Messages : 55
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Personnellement, je ne suis pas fan de cette syntaxe.
    Et dans mes propositions (pas de retour ou retourner un objet) tu opterais pour laquelle ?

    Merci

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Je sais que c'est le comportement des classes Java "final" (dont String est certainement le cas le plus emblématique) mais je préfère l'utiliser le moins possible dans d'autres contextes. Maintenant, ça reste relatif et ça dépend du besoin que l'on a derrière...
    Pour être plus précis il s'agit des classes dites immuables (différent et bien plus que juste final).
    Effectivement le choix de faire une classe immuable doit être murrement réfléchi et non fait à la légère. Voici un article dédié à ce sujet Classes et objets immuables

    Pour en revenir au sujet, je trouve qu'il est tout à fait correct d'utiliser la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public MyObject setData(MyData data) {
        this.data = data;
        return this;
    }
    Cela permet en effet de pouvoir enchainer des appels ce qui peut être vraiment pratique (voir par exemple les méthodes append() du StringBuilder).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  8. #8
    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 CyberChouan Voir le message
    Personnellement, je ne suis pas fan de cette syntaxe.

    Si on n'y fait pas attention, on a vite fait d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Position pos = new Position(0,0);
    pos.suivantTranslation(2,2);
    Et de croire que l'objet "pos" a été translaté.

    Par ailleurs, ça multiplie les instances de la classe, ce qui n'est pas forcément le but souhaité.
    c'est précisement pour ces raisons que j'ai changé le nom!
    ce n'est pas un Point mais une Position (unique).
    Les aspects des objets immuables sont bien vendus dans la note référencée.
    Quand on a l'habitude des objets "valeurs" (exemple BigDecimal) on ne fait plus ce genre de fautes. Donc , au contraire, j'encouragerai les programmeurs à se familiariser avec ce type d'objets.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 23
    Dernier message: 11/06/2024, 11h23
  2. [Bonne pratique]Stratégie d'allocation
    Par jowo dans le forum C
    Réponses: 1
    Dernier message: 05/10/2005, 14h47
  3. [FOREIGN K] Valeur de champ = nom de table. Bonne pratique ?
    Par Seb des Monts dans le forum Langage SQL
    Réponses: 9
    Dernier message: 17/05/2005, 10h56
  4. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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