A menudo veo m_
prefijo utilizado para las variables ( m_World
, m_Sprites
, ...) en tutoriales, ejemplos y otros códigos relacionados principalmente con el desarrollo del juego.
¿Por qué la gente agrega prefijo m_
a las variables?
hungarian-notation
Kravemir
fuente
fuente
m_
, sin embargo, la mitad de las respuestas aquí son un comentario sobre por qué todos piensan que su favorito actual es el mejor.Respuestas:
Esta es una práctica de programación típica para definir variables que son variables miembro. Entonces, cuando los use más adelante, no necesita ver dónde están definidos para conocer su alcance. Esto también es genial si ya conoce el alcance y está usando algo como intelliSense , puede comenzar
m_
y se muestra una lista de todas sus variables miembro. Parte de la notación húngara, vea la parte sobre el alcance en los ejemplos aquí .fuente
m_
.En Clean Code: A Handbook of Agile Software Craftsmanship hay una recomendación explícita contra el uso de este prefijo:
También hay un ejemplo (código C #) de esto:
Mala práctica:
Buena práctica:
Contamos con construcciones de lenguaje para referirse a variables miembro en el caso de la ambigüedad de manera explícita ( es decir ,
description
miembros ydescription
parámetros):this
.fuente
Es una práctica común en C ++. Esto se debe a que en C ++ no puede tener el mismo nombre para la función miembro y la variable miembro, y las funciones getter a menudo se nombran sin el prefijo "get".
"m_" indica para el "miembro". El prefijo "_" también es común.
No debe usarlo en lenguajes de programación que resuelvan este problema usando diferentes convenciones / gramática.
fuente
El
m_
prefijo se usa a menudo para las variables miembro; creo que su principal ventaja es que ayuda a crear una distinción clara entre una propiedad pública y la variable miembro privada que la respalda:Puede ser útil tener una convención de nomenclatura coherente para las variables de respaldo, y el
m_
prefijo es una forma de hacerlo, una que funciona en lenguajes que no distinguen entre mayúsculas y minúsculas.La utilidad de esto depende de los idiomas y las herramientas que esté utilizando. Los IDE modernos con herramientas de refactorización e intellisense fuertes tienen menos necesidad de convenciones como esta, y ciertamente no es la única forma de hacerlo, pero vale la pena estar al tanto de la práctica en cualquier caso.
fuente
this.
en su idioma, entoncesm_
es realmente inútil.m_
es distinguirlo de la propiedad que respalda,this.Something
por lo tanto, para la propiedad frentethis.m_something
al miembro de respaldo. No es una convención que prefiera, pero la he visto principalmente en lenguajes insensibles a mayúsculas (como VB).this.Something
para la propiedad ythis.something
para el respaldo? Othis._something
para el respaldo?this.m_something
Es redundante. Lo uso_something
para no escribirlo accidentalmente cuando voy a escribirSomething
, nada que ver con membresía o no_
prefijo por sí solo haría el trabajo, perom_
es la convención. No es uno que usaría personalmente, pero si lo ves en código, esa fue la intención del autor.Como se indica en las otras respuestas, el
m_
prefijo se usa para indicar que una variable es un miembro de la clase. Esto es diferente de la notación húngara porque no indica el tipo de la variable sino su contexto.Lo uso
m_
en C ++ pero no en otros lenguajes donde 'this' o 'self' es obligatorio. No me gusta ver 'this->' usado con C ++ porque satura el código.Otra respuesta dice
m_dsc
es "mala práctica" y "descripción"; es una "buena práctica" pero es un arenque rojo porque el problema es la abreviatura.Otra respuesta dice que escribir
this
aparece IntelliSense, pero cualquier buen IDE tendrá una tecla de acceso rápido para mostrar IntelliSense para los miembros de la clase actual.fuente
m_description
vsdescription
.Como se indica en muchas otras respuestas, m_ es un prefijo que denota variables miembro. Es / fue comúnmente usado en el mundo C ++ y también se propagó a otros lenguajes, incluido Java.
En un IDE moderno es completamente redundante ya que el resaltado de sintaxis hace evidente qué variables son locales y cuáles son miembros . Sin embargo, cuando el resaltado de sintaxis apareció a fines de los 90, la convención había existido durante muchos años y estaba firmemente establecida (al menos en el mundo de C ++).
No sé a qué tutoriales se refiere, pero supongo que están usando la convención debido a uno de dos factores:
fuente
Lockheed Martin utiliza un esquema de nomenclatura de 3 prefijos con el que fue maravilloso trabajar, especialmente al leer el código de otros.
Entonces...
Tómelo por lo que vale.
fuente
Para completar las respuestas actuales y como la pregunta no es específica del lenguaje, algunos proyectos C usan el prefijo
m_
para definir variables globales que son específicas de un archivo, yg_
para las variables globales que tienen un alcance mayor que el archivo que están definidas.En este caso, las variables globales definidas con prefijo
m_
deben definirse comostatic
.Consulte la convención de codificación EDK2 (una implementación UEFI de código abierto) para ver un ejemplo de proyecto que usa esta convención.
fuente
Un argumento que aún no he visto es que
m_
se puede usar un prefijo como para evitar que el nombre entre en conflicto con#define
'd macro's.Búsqueda de expresiones regulares desde
#define [a-z][A-Za-z0-9_]*[^(]
in/usr/include/term.h
curses / ncurses.fuente