Se você estiver usando getters e setters, como deverá nomear as variáveis de membro privado?
Pergunta
Como uma espécie de acompanhamento esta pergunta sobre prefixos, concordo com a maioria das pessoas no tópico que os prefixos são ruins.Mas e se você estiver usando getters e setters?Então você precisa diferenciar o nome do getter acessível publicamente da variável armazenada de forma privada.Normalmente uso apenas um sublinhado, mas existe uma maneira melhor?
Solução
Esta é uma questão completamente subjetiva. Não existe uma maneira "melhor".
Uma maneira é:
private int _x;
public get x():int { return _x; }
public set x(int val):void { _x = val; }
Outro é:
private int x;
public get X():int { return x; }
public set X(int val):void { x = val; }
Nem é a resposta certa. Cada um tem vantagens e desvantagens de estilo. Escolha o que você mais gosta e aplique -o de forma consistente.
Outras dicas
Gosto de prefixar campos com um sublinhado, como outros mencionaram.
private int _x;
Eu acho que isso vai além da preferência pessoal direta (como David Arno disse neste tópico). Eu acho que há algumas razões objetivas reais para fazer isso:
- Isso significa que você evita ter que escrever "this.x = x" para atribuições (especialmente em setters e construtores).
- Distingue seus campos de suas variáveis/argumentos locais. É importante fazer isso: os campos são mais complicados de manusear do que os locais, pois o escopo deles é mais amplo / a vida útil é mais longa. Adicionar o personagem extra é um sinal de alerta mental para os codificadores.
- Em alguns IDEs, o sublinhado fará com que o recompense automaticamente os campos até o topo da lista de sugestões. Isso facilita ver todos os campos para a classe em um bloco. Por sua vez, isso pode ser útil; Nas grandes classes, talvez você não consiga ver os campos (geralmente definidos na parte superior da classe) na mesma tela do código em que você está trabalhando. Classificá -los para o topo fornece uma referência útil.
(Essas convenções são para Java, mas existem semelhantes para outros idiomas)
Essas coisas parecem pequenas, mas sua prevalência definitivamente facilita minha vida quando estou codificando.
Em java existe this.foo em python existe self.foo e outras linguagens possuem coisas parecidas, então não vejo necessidade de nomear algo de forma especial, quando já posso usar uma construção de linguagem.No mesmo contexto, bons IDEs e editores entendem as variáveis de membro e dão a elas um destaque especial, para que você possa realmente vê-las sem usar nomes especiais.
Em uma linguagem sensível ao caso que acabei de usar:
private int myValue;
public int MyValue
{
get { return myValue; }
}
Caso contrário, eu usaria um sublinhado
Private _myValue As Integer
Public ReadOnly Property MyValue As Integer
Get
Return _myValue
End Get
End Property
Existem quase tantas maneiras diferentes de fazer isso quanto os programadores fazendo isso, mas algumas das maneiras mais populares incluem (para uma propriedade Foo
):
- mfoo
- m_foo
- _foo
- foo
EU Curti escrevendo "this.x = x". Está muito claro para mim. Além disso, ao usar o Eclipse, você pode gerar automaticamente seus getters/setters dessa maneira.