Para mim, encontrar um bom nome para algo sempre volta a pensar nele como um objeto que precisa justificar sua existência. Pergunte a si mesmo:
- O que a classe / método / variável faz, ou seja, qual é o seu objetivo mais amplo e para que serve?
- O que especificamente sobre seu propósito ele precisa se comunicar, ou seja, qual é a parte essencial que o nome precisa ter nele?
A maioria dos desenvolvedores concorda que a legibilidade é sempre de suma importância quando se trata de nomeação. Não basta escrever código para que você saiba o que quer dizer enquanto estiver escrevendo, para que alguém que esteja olhando o código pela primeira vez em algum momento no futuro saiba o que você quis dizer sem ter que pensar muito. Você escreverá o código apenas uma vez, mas durante sua vida útil, ele provavelmente precisará ser editado várias vezes e lido ainda mais.
O código deve ser auto-documentado, ou seja, sua nomeação deve tornar óbvio o que algo faz. Se você precisar explicar o que uma linha de código faz em um comentário e renomear as coisas não a melhorarem bastante, considere seriamente refatorar essa linha em um novo método com um nome descritivo apropriado, para que, lendo o método original, o Uma nova chamada de método descreve o que está acontecendo. Não tenha medo de ter nomes longos; é claro que você não deve escrever romances em nomes de classe / método / variável, mas prefiro que um nome seja muito longo e descritivo do que curto demais e preciso descobrir o que ele faz olhando sob o capô. Exceto por algumas exceções óbvias, como coordenadas x / y e acrônimos comumente usados, evite nomes e abreviações de caracteres únicos. Chamando algo "bkBtn" em vez de "backButton"
Tanto quanto seu idioma permitir, faça com que seu código seja lido como uma frase em inglês. Objetos usam substantivos, métodos usam verbos. Os métodos booleanos geralmente começam com "is", mas existem muitas outras opções que transmitem o significado ainda melhor, dependendo do caso de uso, como "can", "should" ou "does". Obviamente, nem todos os idiomas podem ser tão bons quanto o Smalltalk, mas alguns símbolos geralmente são entendidos como partes da frase. Duas convenções do Smalltalk que eu pessoalmente gosto de levar para outros idiomas, tanto quanto possível, são o prefixo do nome dos parâmetros do loop com "each" e o método do prefixo com o artigo "a" (ou "an" ou "some" para coleções) . Isso pode não ser um padrão comum em Java, e qualquer um pode ignorar esse bit, mas acho que isso melhora muito a legibilidade do código. Por exemplo (exemplo em Java):
public boolean shouldConsiderAbbreviating(List<String> someNames) {
for (String eachName : someNames) {
if (isTooLong(eachName)) {
return true;
}
}
return false;
}
Isso deve ser legível para pessoas com um pouco de conhecimento de Java, algo como isto:
Para determinar se você deve considerar abreviar uma lista de alguns nomes (que são cadeias), itere sobre alguns nomes e, para cada nome, determine se é muito longo; se sim, retorne true
; se nenhum for muito longo, retorne false
.
Contraste o código acima apenas nomeando o argumento strings
e a variável loop string
, especialmente em um método mais complexo. Você precisaria olhar atentamente para ver a diferença, em vez de o uso ser óbvio com uma olhada no nome.