Estaba discutiendo con un desarrollador senior de convenciones de codificación para aplicar a nuestros proyectos (principalmente proyectos Java / JEE). No estoy de acuerdo con una convención que propuso:
Los nombres de las variables de instancia deben comenzar con "_", las variables locales con "loc" y los parámetros de método con "par", por lo que sería fácil identificar el origen y el alcance de la variable.
Si bien presentó argumentos a favor de la memoria a corto plazo y la legibilidad, no estuve de acuerdo con el hecho de que disminuye la legibilidad, los IDE como las variables de formato Eclipse de manera diferente dependiendo de su tipo, y este problema se evitaría con una buena clase y diseño de método.
¿Tiene alguna opinión, argumento o estudio que respalde mi punto (o se oponga)?
Respuestas:
Como dice Wikipedia sobre el tema: Reglas para nombrar java,
Según mi experiencia con los estándares de codificación, los nombres de las variables de instancia comienzan con "_" no son muy buenos, como dicen los estándares de Wikipedia.
variables locales con "loc", y parámetros de método con "par", como dijiste, sería fácil identificar un origen y alcance de variable, pero debería ser para ti, no para los otros programadores que algún día pueden revisar tu código para mantenimiento .
Según la especificación Clean Code sobre los métodos, estos deben ser lo más cortos que pueda hacer para facilitar la lectura y los nombres de las variables no deben ser mapeados, deben ser relevantes para la operación que realiza su método.
Prefijos de miembro / alcance, ya no necesita prefijar las variables de miembro con m_. Sus clases y funciones deben ser lo suficientemente pequeñas como para que no las necesite. Y debe usar un entorno de edición que resalte o coloree los miembros para hacerlos distintos.
Además, las personas aprenden rápidamente a ignorar el prefijo (o sufijo) para ver la parte significativa del nombre. Cuanto más leemos el código, menos vemos los prefijos. Finalmente, los prefijos se vuelven desorden invisible y un marcador de código antiguo.
fuente
Esta es una vieja pregunta, pero voy a publicar aquí de todos modos. Tengo más de 20 años de programación y manejo del código de otras personas.
Creo que nombrar su variable con una breve indicación de su alcance es realmente muy útil para la siguiente persona (o usted) que mirará su código.
Uno ya no mira el código en un IDE con bonitos colores (y no puedo recordar qué significan los colores y diferentes IDE muestran diferentes colores, etc.).
Es cierto que los métodos deben ser lo suficientemente cortos como para que no estén cargados de toneladas de variables y toneladas de código, sino incluso en uno corto: cuando se mira el código que es totalmente desconocido, a veces es difícil saber si una variable es una variable de clase, local parámetro variable o método.
Poder distinguir de un vistazo hace que sea muy fácil revisar el código con el que no está familiarizado.
Toma este ejemplo:
Ahora, tómese un tiempo y mire el código (extraído de ElasticsearchTemplate del proyecto spring-data-elasticsearch, el código que estaba revisando que me impulsó a buscar en Google lo que la gente dice sobre las convenciones de nomenclatura).
resultsMapper
?requestBuilding
un parámetro?Aquí está mi sugerencia simple sobre cómo se deben nombrar las variables:
HOST_NAME
).resultsMapper
).a
(por ejemploaQuery
,aClazz
).my
(por ejemplomyIndexName
,myType
).El código anterior se convierte en:
}
¿Eso es perfecto? No lo creo. Pero lo anterior, en lo que respecta a las variables, ahora es más fácil de leer. Hay otras cosas, como la alineación y el espaciado, que no abordaré en esta respuesta, ya que no está relacionada con la pregunta, lo que facilitaría también la lectura.
¿No te gusta Camel Case? Bien, use guiones bajos, etc., pero prefija sus variables locales y sus parámetros para hacerlos diferentes a las variables de instancia de clase.
No le gusta
a
ymy
, bueno, simplemente manténgase constante dentro de su proyecto y use otra cosa ... pero use algo.Regla # 1: consistencia dentro del proyecto.
Regla # 2: facilite la lectura y no requiera que el lector sepa todo antes de poder aprender.
fuente
Esto es en gran medida una cuestión de preferencia, y como tal no hay una respuesta "correcta". Entonces, esta pregunta en realidad podría estar cerrada. Pero antes de que lo haga, déjame decirte que estoy totalmente de acuerdo contigo. Los prefijos disminuyen la visibilidad en lo que a mí respecta. Sin mencionar el hecho de que, si va a haber algún prefijo, debe usarse para cosas más útiles, como la intención original de la notación húngara , y no para cosas que su IDE pueda resaltar de todos modos.
Uso SentenceCase para datos de instancia (ya sean variables o constantes) y lower_case para parámetros y variables locales, ya que realmente hay muy poca, si alguna, diferencia entre los dos. Nunca, nunca uso headlessCamelCase porque es poco convincente : un identificador de un solo componente parece en minúsculas, incluso si estaba destinado a ser headlessCamelCase.
fuente