Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# Convention nommage

Hungarian-style notation

Sujet résolu
    17 mars 2011 à 20:07:08

    bonjour a tous.

    J'ai une petite question concernant les conventions de nommage en c#.

    Quel est la "bonne" convention a respecter pour le nommage des variables? Dans mes cours, il me semble bien qu'on nous disait d'utiliser le Camel cases pour les attributs
    private string myString;
    

    et le Pascal pour les proprietes et methodes
    public MyString()
    


    Je vois regulierement dans du code les attributs avec _ devant et aussi beaucoup de 'Hungarian-style notation' du genre
    private string _strMyString;
    
    ou
    private int _iMyInt
    


    Donc quel sont les bonnes manieres? Je sais que cela a peu d'importance, mais j'aimerais etre sur d'utiliser les convention qui conviennent.

    Merci

    Doum
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2011 à 20:34:42

      Les conventions propres à .NET sont:
      - Pascal case pour les classes, méthodes, propriétés et attributs publics
      - Camel case pour les variables et attributs privés ou protected
      - Attributs privés ou protected débutant par un underscore

      Pour la notation hongroise, c'est une horreur qui n'a plus de raison d'être aujourd'hui.
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2011 à 20:53:11

        Merci bien!

        Effectivement la notation hongroise embrouille plus qu'autre chose (peu etre un interret pour les languages faiblement typé?).

        Edit: Ups je n'avais pas vu ton edit :)

        Par contre quel est l'interet (outre respecter la convention) du _sur les champs private et protected?

        Simplement pour une distinction entre private / public?

        Edit2: Quelle difference fait tu entre variable et attribut? Pour moi c'est la meme chose non? Et d'ailleur il me semble qu'il appele ca 'champs' en .net?
        • Partager sur Facebook
        • Partager sur Twitter
          17 mars 2011 à 22:07:20

          Mon héritage C++ me pousse à appeller "variable" une variable locale et "attribut" un champ.

          De même, certains conventions préfixent leurs champs de m_ ou m. .NET fait de même avec _.
          • Partager sur Facebook
          • Partager sur Twitter
            17 mars 2011 à 23:12:00

            Citation : cindoum

            Par contre quel est l'interet (outre respecter la convention) du _sur les champs private et protected?

            Simplement pour une distinction entre private / public?


            En principe tous les champs doivent être private (parfois protected, mais le moins possible), jamais public.
            L'underscore sert surtout à les distinguer des variables locales sans devoir les préfixer de "this." quand on les utilise.

            Par exemple, ça permet d'écrire
            public class Personne
            {
                private int _age;
            
                public Personne(int age)
                {
                    _age = age;
                }
            
                // ...
            }
            

            Dans le constructeur et dans toutes les méthodes l'underscore permet de repérer instantanément les champs de l'objet courant et rappelle qu'ils ont une portée différente de celle des autres variables.
            • Partager sur Facebook
            • Partager sur Twitter
              18 mars 2011 à 9:14:11

              Je ne dirais pas mieux que Orwell (son exemple est très bon ^^ ). Les underscrores ( '_' ) servent à distinguer nos membres de nos variables locales et permettent ainsi d'éviter à toujours avoir les préfixer de this.

              Mais on voit un peu des deux notations, soit la camel case soit avec l'underscore (hungarian notation si je ne m'abuse) pour les membres privés ou protected
              • Partager sur Facebook
              • Partager sur Twitter
                18 mars 2011 à 15:50:18

                J'ajouterai que l'on peut aussi distinguer les préfixes "m_" (pour un membre général) et "s_" (pour un membre statique).

                La vieille école consiste par exemple à écrire :

                private int m_myInt;
                public int MyInt
                {
                	get { return m_myInt; }
                }
                // [...]
                m_myInt = 0;
                


                et on peut aussi voir maintenant :

                public int MyInt
                {
                	get; private set;
                }
                // [...]
                this.MyInt = 0;
                


                Le mot-clef this jouant le même rôle que "m_" : indiquer que c'est un membre.

                Certains s'embêtent moins et mettent simplement des "_" ...
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mars 2011 à 16:17:08

                  Pour ce qui est des champs public, je suis completement d'accords. Par contre le _, je trouve cela plutot etrange, car si le but est de rendre un champs local facile a reperer, et bien personnellement je trouve le mot cle this beaucoup plus approprie!

                  En effet avec la coloration syntaxique, le champs ressort beaucoup plus avec un This en bleu plutot que _.

                  Merci a tous pour vos eclair eclaircissement!

                  Doum
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mars 2011 à 16:23:55

                    C'est aussi une question de préférence... Perso je m'efforce de réduire le nombre de champs au strict minimum et je les préfixe toujours avec un underscore. Par contre je rajoute toujours un préfixe "this." devant chaque utilisation d'une propriété ou d'une méthode. Ca peut sembler incohérent d'utiliser toujours "_" pour les champs et toujours "this." pour les propriétés/méthodes, mais c'est une vieille habitude que j'ai conservée ;)

                    La règle générale selon moi est de préfixer tous les membres avec quelque chose qui les distingue des variables locales; on peut effectivement préférer l'utilisation de "this." pour les champs :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 mars 2011 à 17:17:58

                      Oui, il y a bien sur la question de preference, mais je trouve important d'utiliser un 'standard'!

                      Au final je crois que je respecte bien les conventions, et l'utilisation du _ me derange moin que je le croyais :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 mars 2011 à 20:17:43

                        En fait pour moi le underscore n'est pas pas pour distinguer les variables locales des membres, mais le contraire ^^ Si je veux utiliser un variable locale, je suis sur que ça va en être une s'il n'y a pas d'underscore.Par contre lorsque j'utilise un membre, j'ai toujours le mot clé this, donc dans ce cas l'utilisation ou non de l'underscore n'a pas d'importance pour moi
                        • Partager sur Facebook
                        • Partager sur Twitter

                        C# Convention nommage

                        × 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