Como nomear melhor
No desenvolvimento, nomeamos tudo que possível, nomeamos variáveis, funções, parâmetros, classes, pacotes, arquivos fontes... A seguir listarei regras simples para a criação de bons nomes.
Use nome que revelem seu propósito
O nome de uma variável, função ou classe deve responder a todas as grandes questões. Ele deve lhe dizer por que existe, o que faz e como é usado.
Neste exemplo, fica claro que é uma variável que guarda o tempo decorrido em dias:
var elapsedTimeInDays;
Tente evitar sempre algo desse tipo:
var d;
var elpTimeD;
var elapsedTime
Veja a diferença nesses dois códigos:
function getQuantity(list1){
var x = 0;
list.map((val) => {
if(val === 4) {
x++;
}
})
return x;
}
Perceba que neste exemplo dá pra identificar o que a função faz, retorna a quantidade de algo. Entretanto, o que é esse algo? a lista que é passado por parâmetro guarda o que? o que significa o valor 4? Você terá que procurar no restante do código todas essas perguntas.
function getAmountApples(fruitList){
var quantityApple = 0;
var apple = 4;
list.map((fruit) => {
if(fruit === apple) {
quantityApple++;
}
})
return quantityApple;
}
Já neste exemplo, de cara vemos que a função retorna a quantidade de maçãs de uma lista de fruta só pelas nomeação da função e parâmetros. Lembre-se, a questão aqui é nomeação.
Evite informações erradas
- Deve-se evitar passar dicas falsa que confundam o sentido do código. Por exemplo: hp, aix, sco seriam nomes bem ruins de variáveis, pois são nomes de plataformas Unix ou variantes. Mesmo que estiver calculando uma hipotenusa, evite abreviações como hp, pois pode ser mal interpretado. Lembre-se, não é por que você entende que seu coleguinha é obrigado a entender.
- Cuidado ao usar nome muito parecidos. Algo como nosso próximo exemplo pode acabar gerando uma troca de variáveis indesejável:
var xyzControllerForEfficientHandlingOfStrings;
var xyzControllerForEfficientStoragengOfStrings
Faça distinções significativas
- Utilizar números sequenciais em nomes é o oposto de nomes expressivos ( listFruit1, listFruit2 ... ).
- Utilize sempre nomes pronunciáveis, pois a leitura do código deve chegar mais próximo da leitura de um texto. Imagine ler uma variável em voz alta da seguinte forma: no bê cê erre três cê ene tê. Isso é importante, pois a programação é uma atividade social, a leitura deve ser fluida.
var noBCR3CNT;
- Palavras muito comuns são outra forma de distinção que nada expressam, sem falar que palavras comuns são redundantes. Por exemplo: productInfo, productData. Info e Data são palavras muito comuns e vagas, não fica claro o que essas variáveis representam.
Perceba que dos 3 exemplos a seguir retrata esse erro. Qual diferença das 3 funções? Não fica claro a diferença entre elas.
function getActiveAccount();
function getActiveAccounts();
function getActiveAccountsInfo();
- Utilize nomes passiveis de busca. Se você utilizar apenas letras, abreviações ou números, quando ocorrer uma pesquisa por essa variável, irá aparecer dezenas ou centenas de resultados não esperado. Tenha em mente que sum pode não ser prático, mas é bem melhor de fazer uma busca que s.
Evite Codificações
Já temos de lidar com bastante codificações e não precisamos acrescentar mais. Fazer isso, vai exigir tempo e esforço desnecessário na decifração.
Nomes de Classes
Classes devem ter nomes com Substantivo, como Client, PaginaWiki, Eddrees..
Nome de Métodos
Os nomes dos métodos devem ter verbos, como postarPagamento, excluirPagina ou salvar..
Selecione palavras por conceito
Escolha uma palavra por cada conceito abstrato e fique com ela. Por exemplo, é confuso ter que pegar, obter e recuperar como métodos equivalentes de Classes diferentes. Quando for utilizar, vai ficar um pouco complicado de lembrar qual método é de cada classe. Se escolher o método get, tente utilizar get em todos os métodos.
Não faça trocadilhos
Sempre evite utilizar a mesma palavra para propósitos diferentes.
Utilize nome a partir do Domínio da Solução/Solução
Lembre-se de que serão programadores que lerão seu código. Portanto, pode usar temos de Informática, nomes de algoritmos, nomes de padrões, termos matemáticos e etc. Caso não houver como expressar um desses termos ou outros termos, você poderá utilizar um nome do Domínio do problema.
Adicione um contexto significativo
Há poucos nomes que são significativos por si só, a maioria não é. Por isso, você precisa usar nomes que façam parte do contexto para o leitor. Caso a palavra/termo escolhido não dê um contexto por si só, você poderá adicionar um prefixo. Imagine que você leu as seguintes variáveis:
const firstName = '';
const lastName = '';
const street = '';
const houseNumber = '';
const city = '';
De cara você perceberia que se trata de um conjunto de informações que constitui um endereço. Porém, se em algum contexto, uma dessas variáveis surgir sozinha, você conseguirá identificar de que se trata?
Logo, um prefixo é bem vindo nesse caso:
const addrFirstName = '';
const addrLastName = '';
const addrStreet = '';
const addrHouseNumber = '';
const AddrCity = '';
Não adicione contextos desnecessários
Em uma aplicação que você esteja trabalhando chamada “Gas Station Deluxe” (GSD), seria uma péssima ideia adicionar prefixos a toda classe com GDS. Para ser sincero, você estaria trabalhando contra suas ferramentas. Quando você digitar G e pressionar a tecla de autocompletar, aparecerá uma lista grande de classes e métodos iniciando com a letra G.
O mais difícil sobre escolher bons nomes é a necessidade de se possuir boas habilidades de descrição e um histórico cultural compartilhado. Essa é uma questão de aprender.
Não sinta receio de renomear o código por temer que os outros desenvolvedores sejam contra. Quando o condigo muda para melhor, todos ficam agradecidos.
Esse resumo baseado no livro Clean Code Martin R.C.; Michael C.F.; Timothy R.O. Titulo: Clean Code.
Clean Code é vida, dá até gosto quando navegamos por um código e o nome da variável é tão explicito que automaticamente você já associa o que aquela função está executando.
Quando estou codando, geralmente tenho dificuldade de criar nomes bons. Uma dica que sempre me ajuda é pensar no verbo/substantivo relacionado ao contexto do que está sendo criado.
Exemplo 1:
Aqui sei que estou buscando por todos os usuários.
const fetchAllUsers = () => ...
Aqui sei que estou buscando por um usuário pelo id.
const fetchUserById = (id) => ...
Nessas duas funções, o verbo é o mesmo, pois a ação é a mesma. Mas pelo substantivo ser no plural e outro no singular, já começa me indicar que fazem coisas diferentes...
Exemplo 2:
Aqui está executando uma busca, mas pelo quê?
const fetchAll = () => ...
Aqui está executando uma busca pelo id, mas do quê?
const fetchById = (id) => ...
Nesse segundo exemplo, temos que entrar na função pra destrinchar o retorno. Além de que fetchAll e fetchById são nomes bem genéricos. Já vi erro em API onde a pessoa estava quebrando a cabeça, e no final, o que estava acontecendo é que a pessoa fez duas funções com o nome igual no service de duas rotas diferentes. Na hora de importar para o controller, como os nomes eram iguais, acabou importando o service errado e aí o resultado você já sabe.
Sensacional! Post extremamente necessário. Na robótica, meus códigos são sempre um caos! A forma que eu consegui me organizar para melhorar um pouco nessa questão é a utilização de sufixos curtos, como "pos" para posição, "act" para atuador. Sigo esta linha mas sinto que ainda ha muito para melhorar.
Agradeço pela informação!
Por sorte percebi isso bem no comecinho, desde então sempre tomo cuidado máximo com a nomenclatura, não é atoa que passamos a maior parte do tempo com dificuldades em dar nomes ao invés do código hahaha, ótimo post dev :)
Sensacional esse post, tenho 8 meses como dev iniciante e tenho muita dificuldade em nomear minhas classes, métodos e meus atributos. fico realmente feliz com essa explicação, pois me traz uma reflexão e senso de melhoria. Obrigado!
Outra dica importante é programe em apenas um idioma.
Se vai usar português não crie classes e variaves em outros idiomas.
belo resumo do capitulo do livro, vai ajudar bastante. Quem não leu ainda o Clean Code, tem muita coisa importante nesse livro, aaaaaaaaah como me ajudou nos meus rabisco que eu chamo de código
Curti demais essas dicas. Já entrou pra lista dos tópicos favoritos aqui pra dar aquela espiada quando a criatividade falhar! Obrigado pela ajuda, irmão! Sucesso!
vi um meme que se chama "pare de usar 'I' para LOOPS" realmente temos diversas outras formas, chamar de I ao inves de INDEX reduz 400 milisegundos na digitação... mas acredito que nomear bem as variáveis é o caminho (clean code que o diga)
Eu, amigos e colegas passamos algumas dificuldades em nomear, vou compartilhar com eles Postagem massa, essas dicas ja estão nos meus favoritos.
Show! eu estou desenvolvendo um projeto e tenho me pêgo com esta dificuldade, para mim isto será um norte e tentarei replicar o máximo possível.
Realmente, pode confundir demais futuramente.
Também relacionado a este assunto, podemos falar sobre convenções para nome de variáveis/funções que podem variar por linguagem de programação.
Snake case
É um estilo bastante comum na linguagem Python. Consiste em escrever tudo em lowercase, separando cada palavra por um underline. Exemplo: minha_primeira_variavel
(Lower) Camel case
Muito comum em linguagens como Java e JavaScript. Consiste em escrever a primeira palavra começando por uma letra minúscula e as palavras seguintes começando por letra maiúscula, sem espaços. Exemplo: minhaPrimeiraVariavel. Para classes, é comum usar o Upper Camel Case. Neste caso, a primeira palavra também se inicia com uma letra maiúscula.
Lembrando que isso não é uma obrigatoriedade, mas sim uma boa prática reconhecida pelas pessoas que trabalham com cada uma dessas linguagens.
Show! Esse livro é excelente. Gostei da forma que demonstrou também. Inclusive, na semana passada estava vasculhando alguns repositórios e achei um que fez um resumo do livro bem completo em PHP. Achei bem prático e de rápida leitura:
https://github.com/jupeter/clean-code-php
Ah e se voltar o repositório tem a versão em PT-BR também ;)