Eu fiz essa pergunta há algum tempo: Como você nomeia suas variáveis privadas em C #?
Em uma das respostas, fui apontado para a página MSDN da Microsoft que mostra que variáveis / campos particulares devem ter o seguinte nome:
private int myInteger;
Mas um parâmetro seria:
void SomeMethod(int myInteger)
e uma variável local seria assim:
int myInteger;
Então, quando você os referencia assim
myInteger = 10;
você não tem como saber de quem está falando.
Agora estou iniciando um novo projeto e um dos meus colegas de trabalho está me perguntando por que não fazemos algo para diferenciar pelo menos alguns deles.
Eu estou pensando a mesma coisa. Por que o padrão da Microsoft não manteve essas diferenças?
.net
coding-standards
naming
Vaccano
fonte
fonte
this.
.this.component = component
). Se você se deparar com escopos ambíguos em outros lugares, de modo que tenha "um monte de 'isso' redundante". espalhadas pelo seu código ", você terá um código mal escrito.Respostas:
As convenções de nomenclatura originais tinham um prefixo m_ para os alunos, que foi reduzido a um sublinhado simples. Você verá muitos códigos Microsoft C # mais antigos usando um prefixo de sublinhado. No entanto, ouvi em um Tech Ed uma vez que um sublinhado principal não é compatível com CLS. Suponho que essa seja a razão pela qual eles mudaram para o esquema mais simples de um nome serve para todos. Costumava ser (não tenho certeza agora) que os nomes sem distinção entre maiúsculas e minúsculas do VB.Net também não eram compatíveis com CLS.
Quanto vale, ainda uso o sublinhado principal para os alunos. Mesmo que você possa desambiguar usando isso (this.name em vez de name), os erros ainda são resolvidos.
Você não precisa fazer tudo o que a MS solicitar.
fonte
protected
, nãoprivate
local
eparameter
variáveis são nomeadas da mesma maneira porque seu escopo é o mesmoQuanto às variáveis privadas, existem opiniões diferentes sobre isso. Eu sempre usei os padrões encontrados aqui , que especificam o uso de
_
variáveis líderes antes de particulares, embora o autor diga que isso_
é um pouco controverso e que a Microsoft recomenda contra isso.A Wikipedia afirma que em C e C ++
talvez essa tenha sido a razão pela qual a Microsoft recomendou isso, embora seja bastante conhecido que muitos desenvolvedores da Microsoft usam um
_
prefixo para suas variáveis privadas de qualquer maneira.fonte
this
definitivamente se refere ao objeto atual. Eu não entendo o ódiothis
. É porque é incompreendido?Não sei dizer por que eles não os mantiveram diferentes. É provável que ninguém possa, a menos que alguém que tenha participado da criação dos padrões veja essa pergunta.
Muitas pessoas criam suas próprias convenções prefixando variáveis de instância com
_
oum_
, mas eu realmente não acho que isso importe. Você pode deduzir muito do contexto e os IDEs hoje em dia são inteligentes o suficiente para ajudá-lo. O Visual Studio com o complemento ReSharper, por exemplo, mostrará variáveis locais e variáveis de instância em cores diferentes.Se realmente importa diferenciar os dois escopos, você pode usar o
this.
prefixo para se referir à variável de instância:Sem outros plugins, por padrão, o Visual Studio o ajudará com o Intellisense:
(O pop-up ainda pode ser estilizado pelo ReSharper, mas o ReSharper não adiciona nada aos recursos do Intellisense embutido, portanto, embora o estoque possa parecer um pouco diferente, ainda haverá as duas opções. )
Você também pode usar ferramentas de análise de código como FxCop e StyleCop para ajudá-lo a detectar possíveis problemas com nomes e escopo de variáveis.
fonte
this
, eu sempre prefirothis
, porque definitivamente se refere à instância atual em qualquer casa em que você esteja, por isso é preciso. As convenções de sublinhado ou sublinhado m são exatamente isso - convenções que podem ou não se referir a variáveis de instância e são redundantes porthis
. O único lugar que vejo sublinhado útil é no VB que não diferencia maiúsculas de minúsculas para distinguir nomes de objetos e classes. Mas isso é outra história.O pessoal da Microsoft escreveu um livro chamado Framework Design Guidelines, que explicava uma série de convenções, incluindo por que algumas coisas foram revestidas com camelo e outras com pascal .
Editar (adicionando detalhes do livro):
No livro, eles mencionam a realização de estudos de usabilidade, bem como algumas das lições aprendidas com a aquisição do grupo Turbo Pascal. Além disso, enquanto nem todos os idiomas diferenciam maiúsculas de minúsculas (como VB), outros são (como C #), portanto, um deve ser consistente na nomeação. Não se pode depender de diferenças apenas para distinguir itens. Se alguém seguir as convenções usadas pelo restante da estrutura, isso levará a menos confusão por parte dos desenvolvedores.
Capítulo 3, Diretrizes de nomeação.
Seção 3.1 são convenções de capitalização.
camelCasing
é para nomes de parâmetros.PascalCasing
é para namespace, tipo e nomes de membros. No caso de haver acrônimos de duas letras como parte do nome, mantenha-os em maiúsculas juntos, comoIOStream
.Seção 3.5 aborda classes de nomes, estruturas e interfaces.
A Seção 3.6 abrange os membros do tipo de nomeação.
A seção 3.7 cobre os parâmetros de nomeação.
fonte
Porque eles são bastante distinguíveis, pois dependem do contexto em que foram escritos.
Por exemplo, você já usou um parâmetro como variável de membro? Ou uma variável local como parâmetro? Que tal uma variável de membro como local?
Todas as variáveis de membro estão no "corpo" de uma classe. Eu realmente não compro o argumento de que você precisa prefixar o membro quando você pode usá
this
-lo para diferenciá-lo de uma variável local com um nome semelhante, caso contrário, não é necessário.Uma variável local também é definida apenas dentro do escopo de um método ou no escopo de um bloco de código.
Um parâmetro é sempre definido na assinatura do método.
Se você confundir ou misturar todos esses tipos de variáveis, realmente deverá pensar mais no design do código para torná-lo mais legível ou detectável. Dê a eles nomes melhores e mais auto-descritivos do que
myInteger
.fonte
Não consigo responder à sua pergunta sobre os padrões da Microsoft. Se você quer um padrão para diferenciar essas coisas, o uso padrão I para os parâmetros PL / SQL é prefixar o nome do parâmetro com
in_
,out_
,io_
, para os parâmetros in-, OUT-, e in-OUT-. Variáveis locais para uma função são prefixadas com av_
.fonte
A maioria das empresas que conheço possui padrões de codificação que especificam um sublinhado ou a letra minúscula m (para "membro", presumo)) como um prefixo para suas variáveis de membro.
então
_varName
ou
mVarName
fonte
Assim como outras pessoas apontaram, geralmente você pode dizer qual é qual pelo escopo em que o item é usado. Você realmente não pode ter o parâmetro e a variável local no mesmo escopo e, se quiser a variável privada, use this.myInteger. Portanto, não acho que a Microsoft se preocupe muito com isso, pois você pode diferenciá-los facilmente, se quiser.
Mas, dito isso, estou um pouco surpreso que ninguém tenha dito isso ainda, mas esqueça a Microsoft e suas convenções de nomenclatura (bem, alguém já deveria ter dito isso agora, pois eu tive que correr para uma reunião e deixar isso aberto sem enviar isto). A notação húngara também foi uma convenção de nomenclatura iniciada na Microsoft (ou era a Xerox? Eu nunca me lembro quando Simonyi surgiu). Não consigo pensar em ninguém que conheço que não amaldiçoe o nome da notação húngara até hoje. Ficamos tão irritados com isso no local que trabalhei que criamos nosso próprio padrão que usamos internamente. Isso fez mais sentido para nós e acelerou um pouco o nosso trabalho (na verdade era bem parecido com o que a Microsoft sugere agora, mas tudo era um caso pascal, com exceção das variáveis privadas).
Dito isto, o novo padrão usado pela Microsoft (a mistura de estojo de camelo e estojo de pascal) não é tão ruim. Mas se você e seus colegas de trabalho não gostarem, crie seu próprio conjunto de padrões (coletivamente é o melhor). É claro que isso depende se sua empresa já possui ou não um conjunto de padrões. Se o fizerem, cumpra-os. Caso contrário, invente o que funciona para você e seus colegas de trabalho. Apenas mantenha a lógica.
Como Aaronaught solicitou citação sobre Charles Simonyi e notação húngara: http://en.wikipedia.org/wiki/Charles_Simonyi
http://en.wikipedia.org/wiki/Hungarian_notation
http://msdn.microsoft.com/en-us/library/aa260976(v=VS.60).aspx
http://ootips.org/hungarian-notation.html
http://www.hitmill.com/programming/vb/Hungarian.html
http://web.mst.edu/~cpp/common/hungarian.html
Os dois últimos são apenas exemplos da notação húngara e o link ootips é apenas algumas citações sobre algumas opiniões sobre o assunto. Observe que também há notação húngara do sistema, mas que, até onde eu sei, chegou à popularidade dos programadores da Microsoft (embora diferentemente do Simonyi para a variação de aplicativos, não sei quem).
fonte