Sé que la convención en Java para getters booleanos es incluir el prefijo "es".
isEnabled
isStoreOpen
Pero, ¿y si el sujeto es plural? Es decir, ¿y si en lugar de querer saber si una tienda está abierta, quisiera saber si todas las tiendas están abiertas?
isStoresOpen()
no tiene sentido en inglés.
Estoy tentado a escribir getters como:
areStoresOpen
areDogsCute
areCatsFuzzy
Y creo que eso tendría sentido, pero me han dicho por otros que yo debería aguantar y abandonar sujeto y el verbo acuerdo y utilización isStoresOpen
, isDogsCute
, isCatsFuzzy
.
De todos modos, ¿qué debo hacer con los getters booleanos que operan en un sujeto plural?
java
naming-conventions
boolean
Kodai
fuente
fuente
are*()
getter.are*()
getters si son gramaticalmente correctos.is
ohas
...Respuestas:
No recuerdo de qué libro es esto, pero la esencia es que el código se leerá muchas más veces de las que está escrito. Escriba para facilitar la lectura.
fuente
storesAreOpen()
probablemente sería el más gramatical (debido aif(storesAreOpen())
), pero la parte booleana del nombre ahora está oculta en el medio del nombre del método, lo que rompe las convenciones de Java y el código legible.¿Qué tal tener un inglés lo suficientemente decente y seguir el estándar Java?
isEveryStoreOpen()
oisEachCatCute()
Cuando tengo dudas sobre la palabra correcta, siempre me gusta usar el diccionario de sinónimos.
fuente
boolean
sis
convención prefijo. Además, proporciona un poco de información adicional que será realmente útil para aquellos hablantes no nativos de inglés que sean mantenedores del código base.La convención es prefijar el método getter con "es", no la variable en sí.
p.ej
y
Puede que no tenga sentido gramaticalmente, pero sigue la convención y parece lo suficientemente legible.
fuente
La especificación de Java Bean dice usar
get
para getters a menos que sea unboolean
uso posterioris
.are
no es estándar y no será reconocido por nada que espere la denominación estándar de Bean.fuente
Muchas herramientas esperan
is
oget
probablemente no reconoceránare
.Intente reformularlos, me gusta
getDogsAreFuzzy()
ogetStoresAreOpen()
cosas así para una mejor compatibilidad y convenciones.fuente
-
isEnabled()
también se puede escribir comogetEnabled()
enJava naming conventions
.- Es un buen hábito seguir las convenciones de nomenclatura, ayuda cuando trabajas con
Java Beans
.fuente
En general, creo que el código debería ser lo más fácil de leer posible para que un método casi pueda leerse como un párrafo (como lo propugna
Clean Code
). Por lo tanto, nombraría el método para sonar / leer lo más fácilmente posible y seguir la regla gramatical deare
. Con los IDE modernos es fácil encontrar métodos sin buscar específicamenteget
/is
.Sin embargo, Kumar hace un buen punto sobre los frijoles. Muchas herramientas solo buscarán
get
/is
. En ese caso, podría considerar tener ambos métodos. Uno para facilitar la lectura y otro para el uso de herramientas.fuente
¿En qué idioma escribe: inglés o Java ?
Cuando leo código Java, espero que las cosas estén ahí, tener que buscar ambos captadores, con prefijos is y son , será más complicado que buscar un solo prefijo.
Sin embargo, por otro lado, cuando leo el periódico por la mañana, no busco nada, así que puedes escribir en una forma más tradicional del inglés.
return 0;
fuente
En su pregunta, está preguntando explícitamente sobre captadores. Un captador devuelve información sobre una instancia de tu clase. Por ejemplo, tienes una clase
Store
. Ahora,isStoreOpen
es un nombre de método perfectamente bueno para un getter.A continuación, mencionas un método que verifica si todas las tiendas están abiertas. Este método no es un captador en absoluto, porque no devuelve información sobre una instancia sino para todas. Por supuesto, a menos que haya una clase
Stores
. Si este es el caso, debería repensar su diseño, porque Java ya tiene formas de almacenar una cantidad de instancias, por ejemplo, matrices o colecciones, por lo que no tiene que escribir clases adicionales.Si este no es el caso, entonces este nombre de método está perfectamente bien. Una alternativa puede ser simplemente
allStoresOpen
sin el "es".TL; DR: Si está tratando con varias instancias, no es un captador. Si es así, tu diseño es malo.
fuente
Honestamente, diría que definitivamente olvídate del
are*
y quédate conis*
. Piense en el"is"
como el significado de la variable y haga un nombre mejor si es posible.Yo diría que isStoresOpen no suena tan mal, pero puedes hacer isStoresAreOpen si eso te suena mejor.
Pero mi idea general sería ceñirme a las convenciones. Que usa "get" para getters y "is" para tipos booleanos. Personalmente, creo que usar "es" a veces ya es problemático. Sí, se ve bien en condiciones "si", pero a veces simplemente escribo "get" al codificar y reviso la lista desplegable para ver la variable que necesito y empiezo a preguntarme qué está mal y por qué no puedo encontrarlo, entonces me doy cuenta comienza con "es" ...
fuente
En la programación orientada a objetos, esto debe rara vez, o nunca, aparecer desde
Store
oCat
o lo que debe ser una clase separada, con su propioisOpen()
oisFuzzy()
método. Si tiene un tipo más alto, considere dividirlo al nivel más atómico que está usando realmente. En general, los objetos no deben ser plurales en el nivel más bajo.fuente
isStoresOpen () en este StoresOpen parece un plural,
Cuando sigue la Convención de nomenclatura de Java y los Estándares de Java Beans, tienen prefijos predefinidos para booleanos y otros tipos, por lo que debe seguir la Convención de nomenclatura de Java Beans.
Vayamos a su punto. Cuando vea storesOpen como en un prospecto en inglés, sí, parece plural. Una vez más, observe profundamente esa palabra,
aquí
storesOpen es plural según la gramática inglesa,
El resultado de isStoresOpen no es plural, en lugar de singular o puede decir que es escalar en términos de convención de programación.
Su resultado es booleano, solo verdadero o falso
No como su enunciado plural en inglés verdadero o falso
No es una matriz de verdadero o falso , ni una colección de verdadero o falso
Entonces, aquí podemos decir que, aquí estamos interesados en el valor que se devuelve de ese método de frijol booleano, no en el nombre dado a la propiedad de la clase para señalar la entidad del mundo real.
Una cosa más importante es que, siempre que tales propiedades booleanas se utilicen en clases y las bibliotecas predefinidas las utilicen en cualquier marco, el marco con el prefijo de uso ' es ' para recuperar valores booleanos,
por qué significa que no es mucho más inteligente que tú, ya que sabes gramática inglesa como plural / singular, multiplexor, etc.
fuente