¿Es mejor usar "get" como prefijo para getters?

8

si tuviera una propiedad booleana, ¿ shouldAutoLogines mejor nombrar al captador getShouldAutoLogino simplemente shouldAutoLoginpara que se lea más como inglés?

ex:

if(shouldAutoLogin){
    ...
}

o

if(getShouldAutoLogin){
    ...
}
Mike Bryant
fuente
¿Es la propiedad llamada 'shouldAutoLogin'? La reflexión en algunos idiomas (por ejemplo, marcos de trabajo jsp) espera que ${foo.something}se traduzca foo.getSomething()entre bastidores.
Esa parece ser la norma. Sin embargo, para valores booleanos también es común usar en isFoo()lugar de getFoo(). En su ejemplo, eso seríaisAutoLogin()
rath
Si quieres acceder a cualquiera de esas clases desde un jsp, tienes que hacerlo.
Jaydee
@jmoreno, mientras que yo (y otros) hemos mencionado Java, no está claro que el OP esté hablando de ello (en todo caso, dada la elección de expresiones dentro de if()él, es poco probable que sea Java.
77
Las convenciones de nomenclatura de @MikeBryant son específicas del idioma.
CodesInChaos

Respuestas:

9

La convención de nomenclatura para getters es normalmente,

getAutoLogin() si obtiene alguna cadena u objeto.

isAutoLogin() para booleano.

JNL
fuente
11
Esta es una convención de nomenclatura para Java que forma parte de JavaBeans . Para c #, declara los nombres de propiedad sin ningún prefijo como get / set / is.
k3b
@ k3b Gracias por la información. Soy un desarrollador de Java. :) Pero también es bueno saber acerca de la convención de C #. Gracias
JNL
2
Esta pregunta es sobre getters / setters, no sobre propiedades. Pensé que getters y setters en C # generalmente comienzan por get * o set * también (ver por ejemplo stackoverflow.com/questions/16718772/… ).
sergut
1
@sergut: Cierto, pero si los métodos getter / setter son rápidos e idempotentes, normalmente se favorecerían las propiedades sobre los métodos getter y setter. Si no son idempotentes, los prefijos get y set son probablemente engañosos. Si no son rápidos, los prefijos get y set probablemente deberían reemplazarse por prefijos que hacen que sea más obvio que hay costos (por ejemplo, use "CalculateFrob" en lugar de "getFrob").
Brian
@Brian Estaba buscando más aclaraciones. La forma en que vi getters y setter fue SOLO para obtener los datos privados y establecer los datos. En el comentario anterior, cuando dio un ejemplo de CalculateFrob (), sería más como una operación / cálculo que se realizará en los datos privados. Ese cálculo también puede ser temporal y es posible que no necesitemos configurar los datos privados. Espero que entiendas, el punto que estoy tratando de aclarar aquí.
JNL
3

Tradicionalmente, los captadores tienen el prefijo geto ispara el valor. Esto a menudo se menciona en las guías de estilo java. Por ejemplo, Java Programming Style Guide (este es solo un ejemplo).

La convención para tales nombres de métodos se aplica ocasionalmente en herramientas que usan reflexión o esperan ciertos estilos de código. Por ejemplo, nuevamente en Java (aunque el lenguaje de expresión de JSP), ${foo.bar}se traducirá a la llamada foo.getBar()cuando se compile el jsp. El getValue()se aplica de esta manera para que se convierta en algo más que una simple convención.

Como se mencionó, los ejemplos anteriores son de Java. Esta es una convención para Java . Otros idiomas tienen otras convenciones que deberían ser consideradas y probablemente seguidas también. Algunos idiomas usan propiedades (y pueden hacer otras cosas interesantes con ellos, como copiar a pedido o solo lectura).

Consulte las guías de estilo para su idioma particular. Probablemente sea una buena idea seguirlos cuando sea posible para que otros codificadores, cuando lean su código, puedan acceder al código más rápidamente sin tratar de descubrir su estilo personal.


fuente
2

Nombrar un método de una manera hábilmente legible tiene ventajas. Nombrar métodos para que su intención y naturaleza sean fáciles de derivar del nombre ("los captadores tienen prefijo get, predicados booleanos is") también tiene ventajas.

Depende de usted lograr un equilibrio, pero en un gran proyecto los beneficios de la consistencia generalmente superan a los de la inteligencia accidental.

Renombrar un método para hacer que el nombre sea legible y conforme a la convención es un buen ejercicio diario. En su caso particular, consideraría algo como isAutoLoginEnabledo getAutoLoginFlag.

OTOH, usted tiene un montón de métodos conceptualmente similares que todos pueden seguir el patrón shouldDoSomething, su nombre original también puede estar bien.

9000
fuente
Me gusta el "Habilitado" agregado al captador, mejora significativamente la legibilidad que encuentro
Mike Bryant
1

Siempre encuentro que el código debe ser tan legible como sea posible. Ayuda a definir claramente las intenciones del código. En su caso, piense cuáles son los usos positivos y negativos de su valor booleano y cómo afectaría la legibilidad y las intenciones de su lógica.

if(!shouldAutoLogin)
{
     ....
}

versus

if(!getShouldAutoLogin)
{
    ....
}

¿Qué da un significado más claro a la intención de lo que el código está tratando de hacer?

Como otros han sugerido, incluso cambiaría el nombre de la variable a

isShouldAutoLogin

o similar

Gibson
fuente
0

Tiendo a escribir getAutoLogincuando quiero el método para returnun tipo de datos, como an into a String. Sin embargo, si quiero verificar si es trueo false( boolean), simplemente cambio el geta un issiguiente: getAutoLogin> isAutoLogin. Creo que hay una convención de nombres para cada idioma.

Cientifico
fuente