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

C++ Discussion :

[Norme] Ecriture d'attribut


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut [Norme] Ecriture d'attribut
    Bonjour à tous,

    J'aime bien différencier mes attributs membres d'une classe des variables de fonctions et variables temporaires...

    Exemple :
    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
    template <typename TYPE>
    class Point
    {
    public:
    	Point() : _point (std::make_pair(0,0)) {};
    	Point(std::pair<TYPE, TYPE> point) : _point(point) {};
    	Point(TYPE x, TYPE y) :_point(std::make_pair(x,y)) {};
     
    	TYPE getX() const { return _point.first; }
    	TYPE getY() const { return _point.second; }
     
    	bool operator!= (const Point & droite) const {return !(*this == droite); } 
    	bool operator== (const Point & point) const; // paramètre de fonction : pas de "décoration"
    private:
    	std::pair<TYPE, TYPE> _point; // ici attribut de ma classe : commence par un _
    };
    Commencer par un "_" les attributs membres vous parait une bonne pratique? Une sémnatique à éviter en vue de la prochaine norme?
    (Certaines syntaxes sont réservées au "standard" )

    Merci !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2006
    Messages : 80
    Par défaut
    Citation Envoyé par poukill
    Bonjour à tous,

    J'aime bien différencier mes attributs membres d'une classe des variables de fonctions et variables temporaires...

    Exemple :
    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
    template <typename TYPE>
    class Point
    {
    public:
    	Point() : _point (std::make_pair(0,0)) {};
    	Point(std::pair<TYPE, TYPE> point) : _point(point) {};
    	Point(TYPE x, TYPE y) :_point(std::make_pair(x,y)) {};
     
    	TYPE getX() const { return _point.first; }
    	TYPE getY() const { return _point.second; }
     
    	bool operator!= (const Point & droite) const {return !(*this == droite); } 
    	bool operator== (const Point & point) const; // paramètre de fonction : pas de "décoration"
    private:
    	std::pair<TYPE, TYPE> _point; // ici attribut de ma classe : commence par un _
    };
    Commencer par un "_" les attributs membres vous parait une bonne pratique? Une sémnatique à éviter en vue de la prochaine norme?
    (Certaines syntaxes sont réservées au "standard" )

    Merci !
    De mon coté les variables private de mes classes commencent par un m_ , aprés je ne sais pas s'il y a une norme à respecter .....

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut

    http://c.developpez.com/faq/cpp/?pag...eurs_interdits

    Juste une petite erreur qui sera corrigée dans la prochaine version : ce n'est pas "les noms commençant par __", mais "les noms contenant __".

    Certains utilisent _ mais comme suffixe.
    Perso j'aime bien préfixer par "my", ça a un côté sympa quand tu lis le code dans ta tête.

  4. #4
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Il n'y a pas vraiment de norme... Chacun fait un peu comme il veut.
    Il y a néanmoins, dans la plupart des boites, une sorte de "règle de codage" décidé par avance et que les développeurs s'efforcent de respecter. Ca permet de travailler plus facilement en équipe...

    Par exemple, quelques régle de syntaxe de chez nous :
    - Le nom de la classe commence par une majuscule. Si le nom de la classe est une concaténation de plusieurs mots, l'initiale de chaque mot est alors une majuscule. Les autres lettres sont des minuscules.

    ...

    - D'une manière générale, les noms de fonctions et méthodes commencent par une minuscule.
    Exception: pour les fonctions et méthodes écrites dans les extensions MFC, les noms commencent par des majuscules.

    ...

    - Les noms de variables commencent par une minuscule. Si c'est une concaténation de plusieurs mots, chaque mot suivant le premier commence par une majuscule. Les autres lettres sont des minuscules.
    Attributs non-MFC : _myAttribute
    Attributs MFC : m_myAttribute
    Pointeurs : pMyPointer ou _pMyAttributePointer
    Variables globales : g_myVariable
    Variables statiques : s_myVariable

    ...

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oui j'avais déjà vu la FAQ, mais je parlais de l'évolution vers le nouveau standard!
    Au départ, je suffixai, maintenant je préfixe.

    Bon, ok, si y'a pas de problèmes, roulons comme ça !

    Merci à vous

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    il ya une norme "hongroise" ou "suedoise" je sais plus, tres chere aux MFC.

    en gros, tu prefix les donnees par leur type (ex : iA pour int A , lpszString pour char * String (lpsz-> long pointer string terminated by 0) ...

    et tu ajoutes encore un prefixe m_ ou g_ si il s agit de donnees membres ou globales.

    Personnellement, pour l avoir un moment utilisee je te deconseille ce genre de methode ou tu finis par avoir plus de prefix que de nom utile.

    Je trouve finalement que moins il y a a lire, plus c 'est lisible donc je n utilise qu un prefix g_ si la variable est globale (ce qui est extremement rare) et une notation majuscule pour les CONSTANTES ou MACROS (encore tres rare aussi)

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Oui j'avais déjà vu la FAQ, mais je parlais de l'évolution vers le nouveau standard!
    Je ne suis pas le mieux placé pour parler de ça, mais a priori je n'ai rien vu qui modifie les règles de nommage dans le prochain standard.

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    OK merci à smashy et Laurent!

    La notation _variable est quand même un peu lourde

    m_variable, c'est sans doute un peu mieux.
    myvariable, c'est plus trop lisible
    my_variable, c'est pas mal...

    Bon, je vais réfléchir...


    Merci !

  9. #9
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    a part l'introduction de nouveaux mots clefs, il n'y a rien à ma connaissance qui pourrait rendre invalide un identificateur auparavant valide.

    Quant à la convention de nommage, ma préférée est celle avec les myVariable, ne serait-ce que parce qu'elle est aisément lisible à voix haute, ce qui est pratique quand on discute entre collègues.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Le préfixage par des tirets-bas (suivi de majuscules) était réservé au C, et ce n'est pas le nouveau standard du C++ qui va y changer quoi que se soit.

    => pas de préfixage par '_' pour moi.

    Je suis habitué à 'm_' qui me plait bien, ce qui tombe bien, vu que c'est dans les règles de codage du projet courant.

    Quant à la notation hongroise, elle ne traite pas de types, mais de kinds [1], ainsi, lCrt et cCrt ne désigneraient pas un long et char s'appelant Crt, mais une ligne courante et une colone courante qui seraient de même type. (Tout à fait, le système de typage du C++ est extensible au point de répondre à la problèmatique visée par la notation hongroise).

    Ce qui ne m'empêche pas de régulièrement utiliser des iToto, sToto, et eToto quand je réalise des convertions entre entier, énuméré et chaine.

    [1] http://www.joelonsoftware.com/articles/Wrong.html
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par JolyLoic
    a part l'introduction de nouveaux mots clefs, il n'y a rien à ma connaissance qui pourrait rendre invalide un identificateur auparavant valide.

    Quant à la convention de nommage, ma préférée est celle avec les myVariable, ne serait-ce que parce qu'elle est aisément lisible à voix haute, ce qui est pratique quand on discute entre collègues.
    Oui, le seul problème c'est que mes noms de fontions prennent ce genre d'écriture : acheterPain()...
    Autant éviter de les confondre, sans avoir à regarder les () !

    Encore merci à tous pour vos réponses...

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    Et le conventions de nommages pour differencier les fonctions des methods , des methods statiques ??

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

Discussions similaires

  1. Acces ecriture sur un attribut via un dictionnaire
    Par luluunix dans le forum Général Python
    Réponses: 9
    Dernier message: 13/03/2012, 10h35
  2. [NORME ECRITURE] onmouseover
    Par glloq8 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/05/2006, 18h25
  3. Normes d'ecriture java
    Par mortalius dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2006, 14h30
  4. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 16h22
  5. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 17h53

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