Je vois souvent le m_
préfixe utilisé pour les variables ( m_World
, m_Sprites
...) dans des tutoriels, des exemples et autres codes principalement liés au développement du jeu.
Pourquoi les gens ajoutent-ils un préfixe m_
aux variables?
hungarian-notation
kravémir
la source
la source
m_
, mais la moitié des réponses ici sont un commentaire sur les raisons pour lesquelles tout le monde pense que son favori actuel est le meilleur.Réponses:
Il s'agit d'une pratique de programmation typique pour définir des variables qui sont des variables membres. Ainsi, lorsque vous les utilisez plus tard, vous n'avez pas besoin de voir où ils sont définis pour connaître leur portée. C'est également génial si vous connaissez déjà la portée et que vous utilisez quelque chose comme intelliSense , vous pouvez commencer par
m_
et une liste de toutes vos variables membres s'affiche. Une partie de la notation hongroise, voir la partie sur la portée dans les exemples ici .la source
m_
ou l'autre.Dans Clean Code: A Handbook of Agile Software Craftsmanship, il y a une recommandation explicite contre l'utilisation de ce préfixe:
Il existe également un exemple (code C #) de ceci:
Mauvaise pratique:
Bonnes pratiques:
Nous comptons avec des constructions de langage pour désigner les variables membres dans le cas d'ambiguïté explicitement ( c. -à ,
description
membre etdescription
paramètres):this
.la source
C'est une pratique courante en C ++. En effet, en C ++, vous ne pouvez pas avoir le même nom pour la fonction membre et la variable membre, et les fonctions getter sont souvent nommées sans le préfixe "get".
"m_" indique le "membre". Le préfixe "_" est également courant.
Vous ne devriez pas l'utiliser dans les langages de programmation qui résolvent ce problème en utilisant différentes conventions / grammaires.
la source
Le
m_
préfixe est souvent utilisé pour les variables membres - je pense que son principal avantage est qu'il aide à créer une distinction claire entre une propriété publique et la variable de membre privé qui la soutient:Il peut être utile d'avoir une convention de dénomination cohérente pour les variables de sauvegarde, et le
m_
préfixe est une façon de le faire - une méthode qui fonctionne dans les langages insensibles à la casse.Son utilité dépend des langues et des outils que vous utilisez. Les IDE modernes dotés d'outils de refactorisation puissants et d'intellisense ont moins besoin de conventions comme celle-ci, et ce n'est certainement pas la seule façon de le faire, mais cela vaut la peine d'être conscient de la pratique dans tous les cas.
la source
this.
dans votre langue, alorsm_
c'est vraiment inutile.m_
est de le distinguer de la propriété qu'il soutient - doncthis.Something
pour la propriété vsthis.m_something
pour le membre de soutien. Ce n'est pas une convention que je préfère moi-même, mais je l'ai surtout vue utilisée dans des langages insensibles à la casse (comme VB).this.Something
pour la propriété etthis.something
pour le support? Outhis._something
pour le support?this.m_something
est redondant. Je l'utilise_something
pour ne pas le taper accidentellement quand je vais taperSomething
, rien à voir avec l'appartenance ou pas_
préfixe seul ferait l'affaire, maism_
c'est la convention. Ce n'est pas celui que j'utiliserais personnellement, mais si vous le voyez dans le code, c'était l'intention de l'auteur.Comme indiqué dans les autres réponses, le
m_
préfixe est utilisé pour indiquer qu'une variable est un membre de la classe. Ceci est différent de la notation hongroise car elle n'indique pas le type de la variable mais son contexte.J'utilise
m_
en C ++ mais pas dans d'autres langages où «this» ou «self» est obligatoire. Je n'aime pas voir «this->» utilisé avec C ++ car il encombre le code.Une autre réponse dit
m_dsc
est «mauvaise pratique» et «description»; est une "bonne pratique" mais c'est un hareng rouge parce que le problème là-bas est l'abréviation.Une autre réponse dit que la saisie fait
this
apparaître IntelliSense, mais tout bon IDE aura un raccourci clavier pour afficher IntelliSense pour les membres actuels de la classe.la source
m_description
vsdescription
.Comme indiqué dans de nombreuses autres réponses, m_ est un préfixe qui désigne les variables membres. Il est / était couramment utilisé dans le monde C ++ et propagé à d'autres langages, y compris Java.
Dans un IDE moderne, il est complètement redondant car la coloration syntaxique montre clairement quelles variables sont locales et lesquelles sont membres . Cependant, au moment où la coloration syntaxique est apparue à la fin des années 90, la convention existait depuis de nombreuses années et était fermement établie (du moins dans le monde C ++).
Je ne sais pas à quels tutoriels vous faites référence, mais je suppose qu'ils utilisent la convention en raison de l'un des deux facteurs suivants:
la source
Lockheed Martin utilise un schéma de nommage à 3 préfixes avec lequel il était merveilleux de travailler, en particulier lors de la lecture du code des autres.
Alors...
Prenez-le pour ce qu'il vaut.
la source
Pour compléter les réponses actuelles et comme la question n'est pas spécifique au langage, certains projets C utilisent le préfixe
m_
pour définir des variables globales spécifiques à un fichier - etg_
pour les variables globales dont la portée est plus grande que le fichier dans lequel elles sont définies.Dans ce cas, les variables globales définies avec le préfixe
m_
doivent être définies commestatic
.Voir la convention de codage EDK2 (une implémentation UEFI Open-Source) pour un exemple de projet utilisant cette convention.
la source
Un argument que je n'ai pas encore vu est qu'un préfixe tel que
m_
peut être utilisé pour empêcher le nom d'entrer en conflit avec#define
les macros 'd.Regex recherche
#define [a-z][A-Za-z0-9_]*[^(]
dans/usr/include/term.h
des malédictions / ncurses.la source