Pregunta

Si tiene una clase con algunas propiedades simples get / set, ¿hay alguna razón para usar los captadores dentro de los métodos de la clase, o debería usar las variables miembro privadas? Creo que podría haber más argumentos sobre los setters (¿lógica de validación?), Pero me pregunto sobre getters.

Por ejemplo (en Java): ¿hay alguna razón para usar la opción 2 ?:

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());
    }
}
¿Fue útil?

Solución

Los programadores Java en general tienden a ser muy consistentes sobre el uso de métodos getter. Programo varios idiomas y no soy tan coherente al respecto;)

Yo diría que mientras no cree un getter, está bien usar la variable en bruto, para las variables privadas . Cuando haces un getter, deberías usar solo eso. Cuando hago un captador para un campo privado, mi IDE sugiere que reemplace los accesos de campo sin procesar automáticamente cuando introduzco un captador. Cambiar a usar un getter está a solo unas pocas teclas de distancia (y sin ninguna posibilidad de introducir errores), por lo que tiendo a retrasarlo hasta que lo necesite.

Por supuesto, si quieres cosas como inyección de getter, algunos tipos de marcos de subprocesamiento y subclases como hibernate, ¡tienes que usar getters!

Otros consejos

Con getters no modificarás accidentalmente las variables :) Además, si usas getters y el " raw " variable, su código puede confundirse.

Además, si usa la herencia y redefine los métodos getter en las clases secundarias, los métodos que usan getter funcionarán correctamente, mientras que aquellos que usan las variables sin procesar no lo harían.

Si usa el método getter en todas partes, y en el futuro realiza una búsqueda de código en todas las llamadas de getMessageId (), las encontrará todas, mientras que si hubiera usado las privadas, podría perder algunas.

Además, si alguna vez se introduce lógica en el método setter, no tendrá que preocuparse por cambiar más de 1 ubicación para ello.

Si el valor que está asignando a la propiedad es un valor conocido o verificado, puede usar la variable privada de forma segura directamente. (Excepto quizás en algunas situaciones especiales, donde sería obvio por qué eso sería malo). Si lo haces o no, es más una cuestión de gusto o estilo. Tampoco es un problema de rendimiento, ya que el compilador incorporará el getter o setter si es lo suficientemente simple.

Si el valor es desconocido para la clase, debe usar la propiedad para establecerlo, de modo que pueda proteger la propiedad de valores ilegales.

Aquí hay un ejemplo (en 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;
   }

}

Si usa el getter, se asegura de obtener el valor después de que se le haya aplicado cualquier lógica / decisión. Probablemente esta no sea su situación típica, pero cuando lo sea, se lo agradecerá.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top