Eu já vi argumentos a favor e contra a Systems Hungarian . Por alguns anos eu tenho trabalhado em um projeto legado que usa esse sistema, nomeando cada variável, função com um prefixo do tipo de variável, por exemplo (strName, intAge, btnSubmit etc.) (conheço os prefixos originais do Hungarian Apps pelo tipo de variável, não o tipo). Gostaria que meu próximo projeto o abandonasse completamente, mas acho mais difícil nomear coisas semelhantes de maneira única, sem recorrer a ela.
Digamos que eu tenha um formulário da Web para coletar endereços de email e armazená-los em uma tabela de banco de dados e um botão que chama a função que salva o endereço no banco de dados.
Se estiver usando a notação de estilo húngaro, posso chamar a caixa de txtEmail
botão btnEmail
e o valor contido na caixa de texto strEmail
. Eu poderia usar uma função storeEmail(strEmail)
para armazenar o email. Eu tenho uma convenção clara aqui, é óbvio o que cada variável é.
Qual seria a melhor prática para nomear essas variáveis
- sem recorrer aos sistemas húngaros,
- sem torná-los longos ou confusos
- e com uma convenção clara para usar em todo o meu projeto?
Respostas:
Seu último ponto é o mais importante - o que você precisar, precisa ser consistente em todo o seu projeto e com seus colegas. Existem duas maneiras principais de obter consistência e, se possível, você deve usar as duas. Primeiro, use uma ferramenta para verificar as convenções de nomenclatura no momento da criação. No mundo .Net, o StyleCop seria um bom exemplo dessa ferramenta. A segunda maneira de obter consistência é ter revisões por pares de todo o código, para que todos possam ficar de olho.
Seus outros dois pontos parecem estar perguntando sobre uma alternativa. Não tenho certeza se você precisa de uma alternativa; o ponto sobre o húngaro não ser mais popular é que ele costumava ser usado para descrever o tipo quando o sistema e as ferramentas de tipo eram um pouco, digamos, menos rigorosos. Ou seja, se você estava programando em C e passando ponteiros pela única maneira de acompanhar o tipo, era usando o húngaro. Agora, se você estiver usando uma linguagem como C # ou Java, não usará ponteiros (ou muito raramente); portanto, a necessidade de qualquer tipo de húngaro desaparece. Além disso, os IDEs modernos permitem ver o tipo com muita facilidade, passando o mouse sobre a variável ou, na pior das hipóteses, usando alguns atalhos para ver a declaração original. Então, acho que você não precisa de nenhum tipo de notação, apenas nomeie a variável pelo que ela faz. Se for um endereço de email, use "email" ou "
fonte
Ao lidar com formulários da web / formulários do Windows / outras coisas gráficas, faz sentido usar o sistema húngaro, já que é possível ter controles muito estreitos - por exemplo, uma caixa de texto e um rótulo juntos; você pode nomeá-los
txtEmail
elblEmail
distingui-los. Na minha experiência, isso é comum e é realmente útil.Mas no seu code-behind, esse tipo de nomeação é desnecessário. Se você tem uma variável do tipo
string
que está sendo usada para armazenar um email, apenas nomeie-oemail
. Se, por algum motivo, você ficar confuso, a maioria dos IDEs deve permitir que você passe o mouse sobre ele e veja seu tipo. (Idealmente, nas coisas OO, pode ser um atributo de algum objeto euser.Email
é ainda mais claro.)Eu acho que se você tiver mais de um objeto sendo declarado no seu código que não é um controle da GUI que poderia ser nomeado com razão
email
, algo está inerentemente errado com o seu design.fonte
O que torna uma variável "muito longa"?
Em vez de
txtEmail
,btnEmail
você poderia usarUserEmailText
,UserEmailButton
eAdminEmailText
,AdminEmailButton
O problema é que você pode começar a sentir que a variável começa a ficar longa:
AdminEmailIsValid
começa a limitar o tempo que eu permitiria que a variável tivesse.Além disso, você pode começar a perceber que está reutilizando um conjunto de variáveis e um conjunto de operações nessas variáveis. É para isso que a OOP foi projetada . Em vez de um conjunto de variáveis, crie um objeto genérico:
Em seguida, você pode instanciar uma nova variável como uma classe e usar a mesma notação de ponto para acessar seus dados:
Obviamente, isso é direcionado a linguagens que usam o paradigma OOP, mas a maioria das linguagens populares de desenvolvimento da Web é orientada a objetos ou permite código orientado a objetos (PHP, Python, C #, C ++, Java, JavaScript, ActionScript, etc. )
fonte
UserEmailText
eAdminEmailText
especificamente). Normalmente, sufixo os tipos, pois ele se move para uma classeUserEmailText
->UserEmail.text
->User.email.text
dependendo da quantidade de abstração / funcionalidade necessária.