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 C++ Discussion :

Naming convention : besoin de conseil pour les template, typedef, static const


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Doctorant en Astrophysique
    Inscrit en
    Mars 2009
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Astrophysique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2009
    Messages : 312
    Par défaut Naming convention : besoin de conseil pour les template, typedef, static const
    Bonjour à tous.

    J'aimerai être au point sur les "naming convention" les plus répandues en C++. Enfin disons que j'aimerai surtout éviter d'adopter un style exotique pour certaines choses "par hyper répandues" et pour lesquelles on ne trouve pas forcément de règles bien établies. Donc pour chaque question qui va suivre, c'est plutôt dans le sens "quel est le style qui n'est jamais utilisé ?" que "quel est le meilleur style de la mort qui tue trop stylé?" qu'il faut la lire. Alors selon vous quel est le style à adopter, ou plutôt celui à exclure pour :

    1) Les abréviations dans les noms qui doivent être normalement en majuscules : MyCRTPClass ou MyCrtpClass ?

    2) Les paramètre template : plutôt template<class TYPE1, class TYPE2> ou template<class Type1, class Type2> ? Et si le premier cas n'est jamais utilisé (c'est celui que j'utilisais jusqu'à présent en fait), y-a-t-il une convention qui permet de différence un paramètre template d'un nom de classe ?

    3) Les typedef de paramètres template (pour une classe de Traits par exemple) les typedef en général : une suggestion de notation "relativement" utilisée ?

    4) Les variables locales : my_local_variable ou myLocalVariable ou encore autre chose ? (j'ai l'impression que le premier est de moins en moins utilisé, mais c'est peut être qu'une impression).

    5) Pour les variables membres : _myDataMember vs myDataMember_ vs myDataMember vs mMyDataMember vs m_myDataMember ? (le cas 1 est différent des notations compilos car c'est une minuscule qui suit le "_" : personnellement c'est celle que j'utilise mais je ne sais pas si c'est considéré comme "mainstream" ou "exotique")

    6) Des conventions pour des static const data members pour éviter de les mélanger avec les autres variables membres ou les paramètres template ?

    Merci beaucoup
    P.S. : j'ai déjà vu les naming convention de google et si je pose la question c'est que je veux essayer d'avoir un échantillon plus grand

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par Kaluza Voir le message
    1) Les abréviations dans les noms qui doivent être normalement en majuscules : MyCRTPClass ou MyCrtpClass ?
    Aucune idée pour le C++. En java, on recommande MyCrtpClass.

    Citation Envoyé par Kaluza Voir le message
    2) Les paramètre template : plutôt template<class TYPE1, class TYPE2> ou template<class Type1, class Type2> ? Et si le premier cas n'est jamais utilisé (c'est celui que j'utilisais jusqu'à présent en fait), y-a-t-il une convention qui permet de différence un paramètre template d'un nom de classe ?
    Je ne sais pas, mais j'utilise plutot le deuxieme des que le nom est un peu long

    Citation Envoyé par Kaluza Voir le message
    3) Les typedef de paramètres template (pour une classe de Traits par exemple) les typedef en général : une suggestion de notation "relativement" utilisée ?
    en général, _t ou _type, les deux sont présents dans la lib standard.

    Citation Envoyé par Kaluza Voir le message
    5) Pour les variables membres : _myDataMember vs myDataMember_ vs myDataMember vs mMyDataMember vs m_myDataMember ?
    Le '_' est mieux après qu'avant. Par contre il n'est pas utile d'utiliser à la fois le '_' et le "my", puisque les deux servent à indiquer la propriété.
    J'ai personnellement une préférence pour member, et getMember(), setMember(), plutot que myMember, member(), member(...)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le '_' est mieux après qu'avant.
    en france, tout comme en angleterre, on lit de gauche a droite!
    et non c'est pas exotique.

    On retrouve egalement m_blabla

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,

    Citation Envoyé par galerien69 Voir le message
    en france, tout comme en angleterre, on lit de gauche a droite!
    et non c'est pas exotique.
    Quels sont les identificateurs interdits par la norme ?
    Donc autant éviter tout les identifiants commençant par un '_'.

    @Kaluza : De l'importance d'être constant : ce qui facilitera la lisibilité de ton code c'est d'être constant sur tes règles de nommage. (1)
    Le seul point assez régulier est l'utilisation du tout MAJUSCULE plutôt pour les constantes (static const, enum).
    Pour d'autres cas (membres, paramètres, variables locales, noms de classes, etc...), les projets que j'ai vu avait une grande variabilité sur les règles de nommage.



    (1)=> Ce qui améliorera sans conteste la lisibilité de ton code c'est de correctement nommer tes items. Un 'Manager' même avec de bonnes règles de nommage bien respectées sera toujours ambigüe quand à son rôle.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Donc autant éviter tout les identifiants commençant par un '_'.
    pourquoi "donc". C'est dangereux?
    (je parle pour membre de classe)

  6. #6
    Membre Expert
    Homme Profil pro
    Chercheur
    Inscrit en
    Mars 2010
    Messages
    1 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 218
    Par défaut
    Salut,

    pour avoir un exemple concret, tu peux regarder dans des livres ou tu peux aussi ouvrir les fichiers de ta STL ou de bibliothèques (boost, ...). Cela pourra te donner quelques bonnes idées. N'oublie pas que tu peux également jouer avec la coloration syntaxique dans ton éditeur de texte.

    Je réponds à tes questions au cas où c'est utile (ça te fera un sondage ;-)) :

    1) j'aurais tendance à choisir MyCrtpClass pour que la majuscule ne serve qu'à séparer les mots. Cela permet de conserver une cohérence dans le code, de rester bien consistant avec tes choix de notations.

    2) la première convention est par exemple utilisée dans l'implémentation de la STL de Visual. La seconde est sûrement également très utilisée. Pour les templates, on trouve de tout! Il y a aussi la notation hongroise tType1, tType2, tParameter, etc.

    3) personnellement, j'utilise la même convention que pour le nommage de fonction. Je trouve cela plus esthétique à l'utilisation mais c'est vraiment une question de goût.

    4) je mets un '_' à la fin. Remarque que, sans convention particulière, tu peux tout aussi bien mettre this-> devant chaque membre, c'est très explicite.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Aleph69 Voir le message
    tu peux aussi ouvrir les fichiers de ta STL
    Très mauvaise idée. Les implémentations de la SL sont bourées d'identificateurs réservés, pour éviter justement les interférences entre ton code et la SL. (Eh, les implémenteurs parlent même de "code obfuscated", on ne peut pas dire qu'ils considèrent ce style comme bon; juste comme nécessaire).

    @galerien69, tu peux être un peu plus fin dans ce que tu retiens, la question est "est-ce que ça en vaut la peine?"

  8. #8
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    Voici ce que j'utilise :
    1) MyCrtpClass (sauf si abreviation de mon invention)
    2) template <class Type1, bool value> parce que le but est justement de pouvoir coder sans faire la différence entre ce qui est template ou non
    3) la nomenclature du type sous-jacent
    4) localVariable
    5) m_membreVariable parce mon EDI est réglé pour l'auto-completion à 2 caractères et que j'ai pris cette habitude
    6) staticConst (comme les locales) parce que MaClasse::variable est suffisant pour montrer le static.
    Je réserve les MAJUSCULES exclusivement au preprocesseur.

  9. #9
    Invité
    Invité(e)
    Par défaut
    La norme réserve explicitement certaines constructions d'identificateurs. DONC autant ne pas utiliser les même constructions pour diminuer le risque de collision. Le donc n'était absolument pas gratuit mais visait bien à montrer une relation déductive dans le propos.
    Ben j'insiste encore. Le DONC fut-il en masjuscule est hatif (gratuit était vraisemblablement choquant...).
    Ces certaines constructions n'incluent pas le _minuscule en tant que membre de classe.
    Il n'y a pas risque de collision.

    C'est prendre un risque de collision avec un nom réservé par une implémentation. Donc produire un code qui ne compile pas avec certains compilateurs/STL ou, pire, dont le code produit n'est pas celui escompté.
    Le risque c'est donc que le compilateur ne respecte pas la norme...
    (et j'ajoute : si tu es sûr de connaître tous les cas, crois tu qu'il en est de même dans ton équipe ?).
    Je plains l'équipe qui développe dans le namespace global.

    Sinon, on utilise cette convention au taff. Il parait même que c'est dans tout le département, et bon, ca a l'air d'aller. Depuis pas longtemps. Juste 3 ans.

Discussions similaires

  1. Besoin de conseils pour les DNS (VPS)
    Par trucmuche2005 dans le forum Hébergement
    Réponses: 7
    Dernier message: 19/03/2015, 15h30
  2. Besoin de conseil pour loguer les résultats des requetes
    Par Fritzoune dans le forum Développement
    Réponses: 6
    Dernier message: 24/11/2010, 19h36
  3. Besoin de conseil pour choisir les technologies de mon futur projet
    Par cryosore dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 26/04/2009, 10h58
  4. Réponses: 4
    Dernier message: 20/05/2005, 13h30
  5. Réponses: 3
    Dernier message: 24/12/2004, 12h21

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