Partage
  • Partager sur Facebook
  • Partager sur Twitter

this en java

Par rapport au langage C++

Sujet résolu
    3 juillet 2008 à 11:35:05

    Bonjour tout le monde,

    Je sais programmer en C++ et je vient de me mettre au Java. Je suis en train de suivre le tutoriel officiel et il y des choses qui me surprennent grandement.
    Dans le tutoriel, on nous fait beaucoup utiliser le mot clé this alors que pour faire la même chose en C++, nous n'en avons pas besoin.

    Prenons cette méthode issus du tutoriel :
    public String comparer(Ville v1){
          String str = new String();
         
          if (v1.getNombreHabitant() > this.nbreHabitant)
              str = v1.getNom()+" est une ville plus peuplée que "+this.nomVille;
         
          else
              str = this.nomVille+" est une ville plus peuplée que "+v1.getNom();
         
          return str;
         
      }
    


    Pourquoi ne pas tout simplement faire :
    public String comparer(Ville v1){
          String str = new String();
         
          if (v1.getNombreHabitant() > nbreHabitant)
              str = v1.getNom()+" est une ville plus peuplée que "+nomVille;
         
          else
              str = nomVille+" est une ville plus peuplée que "+v1.getNom();
         
          return str;
         
      }
    


    Si je me base sur le C++ (oui je sais que ce n'est pas le même langage, mais ils restent néanmoins très proche du Java dans sa structure) this ne sert que a faire référence à l'objet lui même, ce qui permet par exemple de retourner facilement l'objet cible ou de l'envoyer à un constructeur dans le cas d'une recopie d'objet.

    Donc, est ce que quelqu'un peut m'éclairer sur l'utilisation du mot clé this en java.

    D'avance merci.
    • Partager sur Facebook
    • Partager sur Twitter
      3 juillet 2008 à 11:52:35

      dans ce code, this sert a comparer l'objet appelant, par rapport a l'argument v1
      que tu envoies.
      Sans le this, il ne trouvera pas les variables de ton objet appelant.
      • Partager sur Facebook
      • Partager sur Twitter
        3 juillet 2008 à 12:12:48

        J'ai compris cela, mais je trouve que c'est redondant, vu que je suis déja dans mon objet cible, pourquoi est ce que j'ai besoin de le repréciser avec this ?
        • Partager sur Facebook
        • Partager sur Twitter
          3 juillet 2008 à 12:22:29

          parce que tu initialises les variables de l'objet appelant dans la methode main, une autre methode ne peut donc pas les utiliser.
          Pour ne pas utiliser this, il faut declarer la variable nbreHabitants en dehors de la methode main ce qui tout a fait possible.
          Cependant, je pense aussi que cysboy a fait comme ca pour mieux comprendre justement this, pour apres, quand tu utiliseras plusieurs classe
          • Partager sur Facebook
          • Partager sur Twitter
            3 juillet 2008 à 12:22:55

            Ici, il n'est pas nécessaire de préciser avec le mot clé this. Personnellement je préfère le faire parce que c'est un repère visuel qui me permet de mieux savoir ce que je fais (bon dans ce code là on est pas trop perdu mais des fois ... c'est autre chose ;p)

            Par contre, prenons l'exemple tout bête d'un constructeur dont les paramètres portent le même nom que les attributs de la classe :

            [...]
            
            private int id;
            private String chaine;
            private boolean test;
            
            // Constructeur
            public MaClasse(int id, String chaine, boolean test){
            
            	this.id = id; // Ici il est nécessaire de préciser avec "this", id = id ne serait pas correct
            	this.chaine = chaine;
            	this.test = test;
            
            } 
            
            [...]
            


            Voilà, j'espère avoir répondu à ta question :-°
            • Partager sur Facebook
            • Partager sur Twitter
              3 juillet 2008 à 12:40:58

              Oki, ça répond tout à fait à ma question.
              Merci beaucoup.
              • Partager sur Facebook
              • Partager sur Twitter
                3 juillet 2008 à 13:20:41

                Citation : bozzo

                Personnellement je préfère le faire parce que c'est un repère visuel qui me permet de mieux savoir ce que je fais (bon dans ce code là on est pas trop perdu mais des fois ... c'est autre chose ;p)



                La plupart des EDI qui se respectent colore différement les attributs, donc on peut les voir du premier coup d'oeil sans this (mais effectivement, c'est obligatoire si les paramètres ont le même nom que les attributs)

                Sinon, this sert beaucoup pour des méthodes du style : StringBuffer#append(String) qui retourne this pour pouvoir écrire du code du style :

                StringBuffer b = new StringBuffer();
                b.append("Salut").append("Coucou");
                


                (append retourne this)
                • Partager sur Facebook
                • Partager sur Twitter
                  3 juillet 2008 à 13:26:36

                  Citation : millie

                  Citation : bozzo

                  Personnellement je préfère le faire parce que c'est un repère visuel qui me permet de mieux savoir ce que je fais (bon dans ce code là on est pas trop perdu mais des fois ... c'est autre chose ;p)



                  La plupart des EDI qui se respectent colore différement les attributs, donc on peut les voir du premier coup d'oeil sans this (mais effectivement, c'est obligatoire si les paramètres ont le même nom que les attributs)



                  C'est vrai, mais j'ai pris l'habitude de coder dans notepad++ dans lequel ce n'est pas le cas. (Bien sur pour des gros projet j'utilise un IDE comme Eclipse ;p)

                  Niluge n'oublie pas d'indiquer que le sujet est clos ;) Merci :p
                  • Partager sur Facebook
                  • Partager sur Twitter

                  this en java

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown