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

Langage Java Discussion :

underscore devant le nom d'une variable


Sujet :

Langage Java

  1. #1
    Membre du Club
    Architecte de système d’information
    Inscrit en
    Septembre 2005
    Messages
    236
    Détails du profil
    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Septembre 2005
    Messages : 236
    Points : 67
    Points
    67
    Par défaut underscore devant le nom d'une variable
    Bonjour,


    J'aimerais savoir l'intérêt de commencer la nommencalture d'une variable par un underscore "_".

    Mercio

  2. #2
    Membre confirmé Avatar de Diablo_22
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 498
    Points : 490
    Points
    490
    Par défaut
    Le fait de commencer une variable par '_' reste utilie seulement quand c'est une variable d'instance, sa evite l'utilisation du pointeur
    this

  3. #3
    Membre du Club
    Architecte de système d’information
    Inscrit en
    Septembre 2005
    Messages
    236
    Détails du profil
    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Septembre 2005
    Messages : 236
    Points : 67
    Points
    67
    Par défaut
    j'ai un doute d'avoir bien compris, car on peut initialiser une variable d'instance dans un constructeur par exemple sans la préceder par le pointeur this !

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Salut,

    historiquement, le "_" précède les noms des variables d'instance d'une classe.
    C'est une règle de codage "héritée" du C++ (peut être même du C).
    Personnellement je ne l'apprécie pas d'autant que sauf erreur de ma part, cette règle n'est pas mentionnée dans les règles de codage java de Sun.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Points : 310
    Points
    310
    Par défaut
    Citation Envoyé par root76
    j'ai un doute d'avoir bien compris, car on peut initialiser une variable d'instance dans un constructeur par exemple sans la préceder par le pointeur this !
    Oui mais dans ce cas les noms des paramètres doivent être différents des noms des attributs.
    Perso j'utilise le this. J'ai aussi pas mal vu de paramètres nommés "newNomAttribut".
    Les préfixes '_' ça doit donner une sale tête aux getters et aux setters...

  6. #6
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    pourquoi ca donnerait une salle tête aux getters et setters ?
    Ca empêche pas de les faire sans le préfixe.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par root76
    j'ai un doute d'avoir bien compris, car on peut initialiser une variable d'instance dans un constructeur par exemple sans la préceder par le pointeur this !
    diabolo a voulu dire qu'on va avoire du code comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public maclasse( int num){
    _num=num;
    }
    au lieu de(quand ton attribu est nomé "num" et pas "_num"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public maclasse( int num){
    this.num=num;
    }
    on fait c'est ce que j'ai compris
    on tous cas je pense que moi aussi j'ai pas bien compris

  8. #8
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Le "_" est tout simplement une convention d'écriture, elle n'apporte rien à l'efficacité du code. Perso je trouve ça dégueulasse aussi, j'utilise le this.

  9. #9
    Membre du Club
    Architecte de système d’information
    Inscrit en
    Septembre 2005
    Messages
    236
    Détails du profil
    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Septembre 2005
    Messages : 236
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par freakfm
    diabolo a voulu dire qu'on va avoire du code comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public maclasse( int num){
    _num=num;
    }
    au lieu de(quand ton attribu est nomé "num" et pas "_num"):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public maclasse( int num){
    this.num=num;
    }
    on fait c'est ce que j'ai compris
    on tous cas je pense que moi aussi j'ai pas bien compris
    Je pense pas car le code suivant donne comme résultat: 8

    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
    16
    public class test {
     
     
    	private int variable;
     
     
    	public test(){
    		variable=8;
    	}
     
     
    	public static void main(String[] args){
    	       test t6 = new test();
    	       System.out.println(t6.variable);
    	}
    }

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Points : 446
    Points
    446
    Par défaut
    Citation Envoyé par hugo123
    pourquoi ca donnerait une salle tête aux getters et setters ?
    Ca donnerait une sale tête aux getters et setters car ils auraient cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Object _maVariable;
    public Object get_maVariable(){...}
    public void set_maVariable(Object value){...}
    En général, les noms de méthode n'ont pas d'"_".

    Citation Envoyé par hugo123
    Ca empêche pas de les faire sans le préfixe.
    Dans ce cas là, tu ne respecte plus la norme JavaBean qui veut que les accesseurs et mutateurs commencent par get ou set suivit du nom de la variable en mettant la première lettre en majuscule. Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private Object maVariable;
    public Object getMaVariable(){...}
    public void setMaVariable(Object value){...}

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fifan31
    Dans ce cas là, tu ne respecte plus la norme JavaBean qui veut que les accesseurs et mutateurs commencent par get ou set suivit du nom de la variable en mettant la première lettre en majuscule.
    Il veut dire que tu peux définir des getter/setter en respectant les conventions même si la propriété comporte un underscore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Bean {
    	private String _value;
     
    	public String getValue() {
    		return _value;
    	}
     
    	public void setValue(String value) {
    		_value = value;
    	}
    }
    Les noms des méthodes getter/setter ne doivent pas forcément correspondre à un attribut, et ceci ne pose donc aucun problème...

    Par contre on perd alors la génération automatique des getter/setter par l'EDI...


    Citation Envoyé par root76
    Je pense pas car le code suivant donne comme résultat: 8
    Heu... Je ne comprend pas le rapport entre le sujet original et ton code

    a++

  12. #12
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Pour apporter un peu d'eau au moulin, j'utilise moi le '_' pour mes attributs de classes importants (ils sont regroupés en début de classe, les autres sont groupés autour des méthodes qui les utilisent mais n'ont souvent pas d'importance pour le reste de la classe).

    Ca me permet de coder un peu plus rapidement sous eclipse car il me suffit de tapper le nom de mon objet puis le '.' et enfin le '_' pour avoir alors la liste des attributs de ma classe filtrées (liste qui apparaît automatiquement sous Eclipse).

    Et aussi ça me permet d'indiquer quels attributs sont vraiment utiles à ma classe (i.e. représentent une caractéristique de ma classe et non une caractéristique d'un traitement de ma classe).
    Je sais pas si c'est clair

    Après c'est sûr, les getters/setters sont moins jolis.

  13. #13
    Membre du Club
    Architecte de système d’information
    Inscrit en
    Septembre 2005
    Messages
    236
    Détails du profil
    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Septembre 2005
    Messages : 236
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par adiGuba
    Il
    Heu... Je ne comprend pas le rapport entre le sujet original et ton code

    a++
    C'était pour un contre exemple pour ce qui était dit du fait qu'on ne peut affecter une valkeur à une variable d'instance qu'en mettant le poiteur "this" deavnt la variable, o dans mon exemple cela est possible sans avoir recour à ce pointeur

  14. #14
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Citation Envoyé par root76
    Je pense pas car le code suivant donne comme résultat: 8

    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
    16
    public class test {
     
     
    	private int variable;
     
     
    	public test(){
    		variable=8;
    	}
     
     
    	public static void main(String[] args){
    	       test t6 = new test();
    	       System.out.println(t6.variable);
    	}
    }
    C'est normal que ça te donne 8 non ? Je vois pas le rapport. Le fait de mettre un underscore ou non devant un attribut n'a aucune incidence sur le code, c'est juste une convention d'écriture. Si tu avait appaelé ton attribut _variable, ça aurait donné le même résultat. Et de plus, personne n'a dit qu'on est obligé d'affecter un attribut avec le pointeur this, c'est juste au cas où une variable du même nom est utilisée dans la méthode.

  15. #15
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par root76
    C'était pour un contre exemple pour ce qui était dit du fait qu'on ne peut affecter une valkeur à une variable d'instance qu'en mettant le poiteur "this" deavnt la variable, o dans mon exemple cela est possible sans avoir recour à ce pointeur
    Il faut obligatoirement mettre this seulement lorsqu'on a un paramètre du même nom afin de corriger le conflit de nom...

    Sinon le this reste optionnel (et implicite)

    a++

  16. #16
    Membre du Club
    Architecte de système d’information
    Inscrit en
    Septembre 2005
    Messages
    236
    Détails du profil
    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Septembre 2005
    Messages : 236
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par adiGuba
    Il faut obligatoirement mettre this seulement lorsqu'on a un paramètre du même nom afin de corriger le conflit de nom...

    Sinon le this reste optionnel (et implicite)

    a++
    Ok, j'ai bien compris maintenant, merci.

  17. #17
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Un petit tag ? Au passage, moi aussi je trouve le _ super crade ...

  18. #18
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Quitte à ne pas respecter la convention java, je prefere a tout prendre, faire l'inverse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class MaClasse
    {
       String nom;
     
       public MaClasse(String _Nom)
       {
          nom = _Nom;
       }
    }
    Je profite du sujet pour poser une question : existe il pour eclipse des verifieurs de code : je respecte pour ma part scrupuleusement les conventions java, je classe mes methodes par ordre alphabetique ... mais je collabore avec des personnes pour qui cela n'a malheuresement pas d'importance. Un tel outil permettrait en gros de fixer les regles de jeu

  19. #19
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Citation Envoyé par leyee
    Je profite du sujet pour poser une question : existe il pour eclipse des verifieurs de code : je respecte pour ma part scrupuleusement les conventions java, je classe mes methodes par ordre alphabetique ... mais je collabore avec des personnes pour qui cela n'a malheuresement pas d'importance. Un tel outil permettrait en gros de fixer les regles de jeu
    pour la gestion des regles de nommage sous eclipse il y pmd et checkstyle

  20. #20
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    merci je vais aller jeter un oeil

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. Réponses: 7
    Dernier message: 26/08/2011, 06h25
  3. Réponses: 37
    Dernier message: 02/03/2006, 01h58
  4. Incrémenter le NOM d'une variable
    Par Mors_Ubyte dans le forum Access
    Réponses: 1
    Dernier message: 03/01/2006, 18h47
  5. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 14h37

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