Acabei de começar a usar o ReSharper (para C #) e eu meio que gosto do localizador de cheiros de código, ele mostra algumas coisas sobre a minha escrita que eu pretendia corrigir há muito tempo (principalmente convenções de nomenclatura variável).
Isso me levou a reconsiderar algumas das minhas convenções de nomenclatura para métodos e variáveis de instância. ReSharper sugere que a variável de instância seja minúscula e comece com um sublinhado. Por um tempo, pretendi diminuir todas as minhas variáveis locais, mas o sublinhado é necessário? Você acha confortável? Não gosto desta convenção, mas ainda não a experimentei, qual é a sua opinião?
A segunda coisa que me levou a reavaliar é minhas convenções de nomenclatura para manipuladores de eventos da GUI. Normalmente, eu uso o padrão VS de ControlName_Action e meus controles geralmente usam notação húngara (como sufixo, para ajudar a esclarecer no código o que é visível para o usuário e o que não é quando se lida com a variável com nome semelhante), então termino com OK_btn_Click ( ), qual sua opinião sobre isso? Devo sucumbir à convenção ReSharper ou há outras opções igualmente válidas?
Em relação a
Uma coisa que eu gosto muito de usar o sublinhado é que reduz drasticamente o uso de "this".
Considerar:
sem o sublinhado, você teria que escrever:
que potencialmente introduz o erro sutil de:
Além disso, o preenchimento de código é mais limpo, porque, ao vincular o sublinhado, você obtém uma lista apenas dos campos particulares, enquanto que com "this", você obtém uma lista de tudo.
Em relação a
o Framework Design Guidelines: Convenções, Idoms e Patterns para bibliotecas .NET reutilizáveis diz:
Deixando pouco espaço para ambiguidade :)
fonte
this.size
é muito mais claro que_size
. O uso do nome sublinhado não evita o erro sutil, você ainda pode atribuir tamanho a si próprio, embora esperemos que seu compilador informe.this.size
e_size
é a consistência. Comthis.size
é que é opcional. Por exemplo, se houvesse outro campo particular chamadoname
, não seria necessário usarthis.name
o código, eu poderia usar com a mesma facilidadename
sem conflitos. Porquethis
pode ser usado algumas vezes, e não outras, é por isso que o usothis
é inferior. Por outro lado, não há ambiguidade com_
...Consistência é realmente a chave. Isso e clareza, ou seja, não seja enigmático ou tente salvar a digitação abreviando tudo. O Intellisense é o seu protetor de digitação, não nomes enigmáticos (mas curtos!).
fonte
order.Size()
(ao contrário deorder.getSize()
), mas como outras bibliotecas usam getters e setters, meu código não será consistente.Em C #, o início do nome protegido ou público com sublinhado é contra a Especificação de Idioma Comum. É correto apenas no caso de membros privados.
Do MSDN:
Consulte: http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx
Aqui você pode ler o aviso sobre o sublinhado:
Consulte: http://msdn.microsoft.com/en-us/library/81ed9a62.aspx
Membros protegidos são um problema porque você pode herdar da classe escrita em outro idioma.
Mas talvez não seja um problema no seu caso, se você não precisar de código compilador CLS.
fonte
Eu gosto dos sublinhados. Você sabe à primeira vista que a variável é um membro da classe e privada.
Certamente, o IDE pode dizer isso quando você passa o mouse sobre ele, mas o "primeiro olhar" não pode ser batido. Você sabe o que é uma variável local e o que é uma variável membro apenas com seus olhos. Não é necessário rolar o mouse ou passar o mouse.
Você pode usar a palavra-chave "this", mas _ é mais curta para uma melhor digitalização horizontal. Nomes descritivos geralmente são desejados, mas quando algo é uma convenção estabelecida, é melhor ter 1 caractere. por exemplo, usando a letra i como o índice ao percorrer uma matriz. Como é uma convenção estabelecida que eu sou um índice, você obtém o benefício da digitalização sem a desvantagem de se perguntar o que "i" significa.
fonte
Eu concordo geralmente com o que está sendo dito por outros, no entanto, quando se trata de ferramentas e cadeias de ferramentas, sou preguiçoso e gosto de uma vida fácil. Acho que a vida costuma ser mais fácil de fazer do jeito que sugerem. As razões são
Então, acho que você pode encontrar um motivo válido para reconfigurar as ferramentas nas quais você acabou de gastar uma fortuna, de qualquer maneira. Se você não pode justificar a alteração, não.
Lembre-se de que toda e qualquer mudança tem um custo contínuo (real e oculto) para manter. Quanto menos houver, menor será o custo. Por exemplo - esse novo cara que mencionei - nenhuma alteração significa que ele pode ler o manual. Reconfigurar - você precisa escrever o adendo, guardá-lo com outras coisas, retirá-lo e fazê-lo ler depois de ler o manual. Talvez não seja um problema para uma loja de 2 homens, mas que tal uma loja de 100 homens?
fonte
As duas regras que você está perguntando destacam o início dos nomes de campos particulares e os nomes de métodos geralmente são considerados a norma nos círculos de desenvolvimento do C #. Ao se adaptar a essas convenções, seu código será imediatamente mais compreensível para outros desenvolvedores, porque esse é o estado de espírito em que eles estão acostumados a operar.
O sufixo de Label, RadioButton, etc. para seus controles também é geralmente considerado a norma. Freqüentemente, vários controles existirão para um único conceito (por exemplo, um Label e um TextBox), e esse sufixo é bastante útil. A notação húngara verdadeira foi abandonada há muito tempo porque foi bastardizada em algo que não expressa sua intenção original, que era o contexto da variável e não o tipo, tamanho etc.
fonte
No meu caso, usar camelcase e sublinhados ajuda com nomes de variáveis descritivos (leia-se: longos) e conclusão de código. Não sei ao certo como o preenchimento automático do Visual Studio funciona, mas no QtCreator e, em menor grau, no Eclipse, pode-se digitar, por exemplo
e expandi-lo para
Economiza um pouco de digitação caso você tenha nomes como
que costumo produzir quando no "modo de nomeação descritiva".
Usando sublinhados, posso determinar qual nome quero preenchimento automático
ou
Espero que minha explicação seja clara o suficiente :)
fonte