Pergunta

Se você tem uma classe com alguns encontros plain / propriedades definidas, há alguma razão para usar os getters dentro dos métodos de classe, ou você deve apenas usar as variáveis ??de membro privadas? Eu acho que poderia haver mais de uma discussão sobre setters (lógica de validação?), Mas eu estou querendo saber apenas sobre getters.

?

Por exemplo (em Java) - existe alguma razão use a opção 2 a:

public class Something
{
    private int messageId;
    public int getMessageId() { return this.messageId; }
    public void setMessage(int messageId) { this.messageId = messageId; }

    public void doSomething()
    {
        // Option 1:
        doSomethingWithMessageId(messageId);

        // Option 2:
        doSomethingWithMessageId(getMessageId());
    }
}
Foi útil?

Solução

Os programadores de Java em geral tendem a ser muito consistente sobre o uso de métodos getter. I programar vários idiomas e eu não sou tão consistente sobre isso;)

Eu diria que, enquanto você não fazer um getter é ok para usar a variável crua - para privadas variáveis. Quando você faz um getter, você deve estar usando só isso. Quando eu faço um getter para um campo privado, meu IDE sugere que substituir acessos campo matérias automaticamente para mim quando eu introduzir um getter. Mudar para usando um getter é apenas algumas teclas de distância (e sem qualquer chance de erros introduzindo), por isso tendem a atrasar-lo até que eu precisar.

É claro, se você quiser coisas como getter-injeção, alguns tipos de proxy e subclasse framworks como hibernação, você tem que getters usuário!

Outras dicas

Com getters você não vai acidentalmente modificar as variáveis ??:) Além disso, se você usar ambos os getters e a variável "raw", seu código pode ficar confuso.

Além disso, se você usar a herança e redefiniu os métodos getter em classes filho, métodos usando getter funcionará corretamente, enquanto que aqueles que utilizam as variáveis ??matérias não iria.

Se você usar o método getter em toda parte - e no futuro executar um código de pesquisa em todas as chamadas de getMessageId () você vai encontrar todos eles, enquanto que se você tivesse usado os privados, você pode perder alguns

Além disso, se há lógica de sempre a ser introduzido no método setter, você não precisa se preocupar sobre a mudança de mais de 1 local para ele.

Se o valor que você está atribuindo à propriedade é um valor conhecido ou verificado, você pode usar com segurança a variável privada diretamente. (Exceto, talvez, em algumas situações especiais, onde seria óbvio porque isso seria ruim.) Se você faz ou não é mais uma questão de gosto ou estilo. Não é um problema de desempenho ou, como o getter ou setter será inlined pelo compilador se é o suficiente simples.

Se o valor for desconhecido para a classe, você deve usar a propriedade para defini-la, de modo que você pode proteger a propriedade dos valores ilegais.

Aqui está um exemplo (em C #):

public class Something {

   private string _value;

   public string Value {
      get {
         return _value;
      }
      set {
         if (value == null) throw new ArgumentNullException();
         _value = value;
      }
   }

   public Something() {
      // using a known value
      _value = "undefined";
   }

   public Something(string initValue) {
      // using an unknown value
      Value = initValue;
   }

}

Se você usar o getter você está garantindo que você obterá o valor após qualquer lógica / decisões foram aplicadas a ele. Isso provavelmente não é a sua situação típica, mas quando é, você vai agradecer-te por isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top