Voir la version complète : Notion de "this." en java
Bonjour tout le monde;
Voilà j'ai une question vraiment toute bête de débutant en java (dans un cadre scolaire) : à quoi sert "this" dans les class vu qu'on peut accéder directement aux arguments sans celui-ci (contrairement au php par exemple)?
Je vous remercie d'avance!
deathangel
16/10/2007, 10h29
ca sert autant que le this en C++ :)
en gros c'est lors de tes constructeurs par exemple pour un Point2D, tu définirais ta fonction comme
public Point2D(int x, int y)
{
this.x=x;
this.y=y;
}
c'est pour faire la différence entre les variables de ta classe, et celles en paramètre de ta fonction. C'est pour faire un poil plus joli que d'appeler tes variables en paramètre x2 y2 ou les attributs de ta classe monx et mony
sinon ca peut aussi servir à réappeler un autre constructeur.
Suppose tu as un deuxième constructeur par recopie, tu peux faire :
public Point2D(Point2D toto)
{
this(toto.x, toto.y);
}
voila, j'espere que ca t'ira
Ok, merci bien pour cette réponse express! Il n'y a donc aucun lien avec le fait qu'un argument est private ou non?
listorien
16/10/2007, 11h28
Non, aucun, this est utilisé pour n'importe quelle portée de membre.
this peut être aussi utilisé pour les fainéants, comme moi ;), pour lister les membres/méthodes d'un objet : je tape this. et l'IDE m'affiche tous les membres de ma classe et je n'ai plus qu'à choisir le bon dans la liste sans risquer une faute de frappe.
Non, aucun, this est utilisé pour n'importe quelle portée de membre.
this peut être aussi utilisé pour les fainéants, comme moi ;), pour lister les membres/méthodes d'un objet : je tape this. et l'IDE m'affiche tous les membres de ma classe et je n'ai plus qu'à choisir le bon dans la liste sans risquer une faute de frappe.
Tu sais on peut être encore plus fainéant : moi je tape juste CTRL + Espace et hop j'ai ma liste d'attributs ;)
EDIT après vérification : bon c'est pas vraiment vrai, car dans la liste apparaissent d'abord les paramètres de la méthode dans laquelle tu te trouves...
PS : le this sert aussi à t'identifier toi même, par exemple pour te (= l'instance) passer en paramètre d'une méthode : addActionListener(this)
Encore une fois merci pour toutes ces précisions qui vont m'être très utile pour mon tp :D
Juste à noter que selon ta religion, il existe beaucoup de conventions pour éviter le "masquage" (ambiguité sur le nom des variables) dans tes méthodes. Notamment rajouter un "_" en préfixe ou suffixe de tes attributs de classe.
Que tu travailles en C++ ou en Java, je te conseille très fortement les coding-styles de geosoft :
http://geosoft.no/development/
8. Private class variables should have underscore suffix.
class Person
{
private String name_;
...
}Apart from its name and its type, the scope of a variable is its most important feature. Indicating class scope by using underscore makes it easy to distinguish class variables from local scratch variables. This is important because class variables are considered to have higher significance than method variables, and should be treated with special care by the programmer. A side effect of the underscore naming convention is that it nicely resolves the problem of finding reasonable variable names for setter methods:
void setName(String name)
{
name_ = name;
} An issue is whether the underscore should be added as a prefix or as a suffix. Both practices are commonly used, but the latter is recommended because it seem to best preserve the readability of the name.
It should be noted that scope identification in variables have been a controversial issue for quite some time. It seems, though, that this practice now is gaining acceptance and that it is becoming more and more common as a convention in the professional development community.
Oui, mais on peut très bien donner aux attributs un autre préfixe qui les différencie des variables des méthodes (j'utilise le m, suivi d'une majuscule).
Ce n'est qu'une question de goût et d'habitudes (je trouve l'underscore particulièrement peu esthétique).
Le this peut avoir un vrai rôle quand, depuis une méthode de la classe, on appelle une fonction extérieure à la classe et qui prend en argument un pointeur vers une instance de la classe en question.
C'est par exemple le cas en C++ avec Qt et plus précisément avec la fonction connect() sur laquelle repose toute la gestion évènementielle (ortho?) de cette chouette lib.
N'écoute pas ce Nantais de Newbiz :00000031:, je te recommande la code convention de Sun :
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
deathangel
16/10/2007, 21h18
N'écoute pas ce Nantais de Newbiz :00000031:, je te recommande la code convention de Sun :
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
+1 surtout si tu codes en java. De plus en respectant ces conventions, la doc que tu génèreras via javadoc, sera beaucoup plus jolie :)
N'écoute pas ce Nantais de Newbiz :00000031:, je te recommande la code convention de Sun :
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
+1 surtout si tu codes en java. De plus en respectant ces conventions, la doc que tu génèreras via javadoc, sera beaucoup plus jolie :)Oh les mauvaises langues ! :)
Les coding-style de geosoft sont issues de toutes les plus grandes conventions dans leur domaine. Donc pour java, les conventions de SUN (et autres) y sont fusionnées, et complétées !
Voir les références :
7 References
[1] Code Complete, Steve McConnel - Microsoft Press
[2] Java Code Conventions
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html (http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html)
[3] Netscape's Software Coding Standards for Java
http://developer.netscape.com/docs/technote/java/codestyle.html (http://developer.netscape.com/docs/technote/java/codestyle.html)
[4] C / C++ / Java Coding Standards from NASA
http://v2ma09.gsfc.nasa.gov/coding_standards.html (http://v2ma09.gsfc.nasa.gov/coding_standards.html)
[5] Coding Standards for Java from AmbySoft
http://www.ambysoft.com/javaCodingStandards.html (http://www.ambysoft.com/javaCodingStandards.html)
vBulletin® v.3.6.5, Copyright ©2000-2010, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org