Muitas vezes vejo m_
prefixo usado para variáveis ( m_World
, m_Sprites
...) em tutoriais, exemplos e outros códigos, principalmente relacionadas com o desenvolvimento do jogo.
Por que as pessoas adicionam prefixo m_
às variáveis?
hungarian-notation
kravemir
fonte
fonte
m_
favor, mas metade das respostas aqui são um comentário sobre por que todos acham que seu favorito atual é o melhor.Respostas:
Essa é uma prática típica de programação para definir variáveis que são variáveis membros. Portanto, quando você os usar mais tarde, não precisará ver onde eles estão definidos para conhecer seu escopo. Isso também é ótimo se você já conhece o escopo e está usando algo como o intelliSense , pode começar
m_
e uma lista de todas as suas variáveis de membro é mostrada. Parte da notação húngara, veja a parte sobre escopo nos exemplos aqui .fonte
m_
qualquer um.No Código Limpo: Um Manual do Artesanato em Software Ágil, há uma recomendação explícita contra o uso desse prefixo:
Há também um exemplo (código C #) disso:
Má prática:
Boa prática:
Contamos com construções de linguagem para se referir a variáveis de membro, no caso de explicitamente ambigüidade ( ie ,
description
membro edescription
parâmetro):this
.fonte
É prática comum em C ++. Isso ocorre porque em C ++ você não pode ter o mesmo nome para a função e a variável membro, e as funções getter geralmente são nomeadas sem o prefixo "get".
estados "m_" para o "membro". O prefixo "_" também é comum.
Você não deve usá-lo em linguagens de programação que resolvem esse problema usando diferentes convenções / gramática.
fonte
O
m_
prefixo é frequentemente usado para variáveis de membro - acho que sua principal vantagem é que ele ajuda a criar uma distinção clara entre uma propriedade pública e a variável de membro privado que a apoia:Pode ajudar a ter uma convenção de nomenclatura consistente para o backup de variáveis, e o
m_
prefixo é uma maneira de fazer isso - que funciona em linguagens que não diferenciam maiúsculas de minúsculas.A utilidade disso depende dos idiomas e das ferramentas que você está usando. Os IDEs modernos, com fortes ferramentas de refator e inteligência intelectual, têm menos necessidade de convenções como essa, e certamente não é a única maneira de fazer isso, mas vale a pena estar ciente da prática em qualquer caso.
fonte
this.
no seu idioma,m_
é realmente inútil.m_
é distingui-lo da propriedade que ele faz - assim,this.Something
para a propriedade vsthis.m_something
para o membro de apoio. Não é uma convenção que prefiro a mim mesma, mas já a vi usada em linguagens insensíveis a casos (como o VB).this.Something
pela propriedade ethis.something
pelo apoio? Outhis._something
pelo apoio?this.m_something
é redundante. Eu uso_something
para que eu não acidentalmente digitá-lo quando eu vou para digitarSomething
, nada a ver com membershipness ou não_
prefixo por si só faria o trabalho, masm_
é a convenção. Não é um que eu usaria pessoalmente, mas se você o vir no código, essa foi a intenção do autor.Conforme indicado nas outras respostas, o
m_
prefixo é usado para indicar que uma variável é um membro da classe. Isso é diferente da notação húngara porque não indica o tipo da variável, mas seu contexto.Uso
m_
em C ++, mas não em outras linguagens em que 'this' ou 'self' é obrigatório. Eu não gosto de ver 'this->' usado com C ++ porque desorganiza o código.Outra resposta diz que
m_dsc
é "má prática" e 'descrição;' é "boa prática", mas esse é um problema, porque o problema é a abreviação.Outra resposta diz que a digitação
this
exibe o IntelliSense, mas qualquer IDE bom terá uma tecla de atalho para exibir o IntelliSense para os membros da classe atual.fonte
m_description
vsdescription
.Como afirmado em muitas outras respostas, m_ é um prefixo que indica variáveis de membros. É / foi comumente usado no mundo C ++ e propagado para outras linguagens também, incluindo Java.
Em um IDE moderno, é completamente redundante, pois o destaque da sintaxe torna evidente quais variáveis são locais e quais são membros . No entanto, quando o destaque da sintaxe apareceu no final dos anos 90, a convenção já existia há muitos anos e estava firmemente definida (pelo menos no mundo C ++).
Não sei a quais tutoriais você está se referindo, mas acho que eles estão usando a convenção devido a um dos dois fatores:
fonte
A Lockheed Martin usa um esquema de nomeação de três prefixos, que foi maravilhoso de se trabalhar, especialmente ao ler o código de outras pessoas.
Assim...
Leve para o que vale a pena.
fonte
Para concluir as respostas atuais e como a pergunta não é específica ao idioma, alguns projetos C usam o prefixo
m_
para definir variáveis globais específicas de um arquivo - eg_
para variáveis globais com escopo maior que o arquivo definido.Nesse caso, variáveis globais definidas com prefixo
m_
devem ser definidas comostatic
.Consulte a convenção de codificação EDK2 (uma implementação de código aberto UEFI) para obter um exemplo de projeto usando essa convenção.
fonte
Um argumento que ainda não vi é que um prefixo como
m_
pode ser usado para impedir o conflito de nomes com#define
as macro.Pesquisa
#define [a-z][A-Za-z0-9_]*[^(]
em Regex por/usr/include/term.h
curses / ncurses.fonte