11 Hábitos de programación
11.1 Proporcionando acceso a variables de instancia y de clase.
No hacer ninguna variable de instancia o clase pública sin una buena razón. A menudo las variables de instancia no necesitan ser asignadas/consultadas explícitamente, a menudo esto sucede como efecto lateral de llamadas a métodos.
Un ejemplo apropiado de una variable de instancia pública es el caso en que la clase es esencialmente una estructura de datos, sin comportamiento. En otras palabras, si usarías la palabra struct en lugar de una clase (Si Java soportara struct), entonces es adecuado.
11.2 Referencias a variables y métodos de clase
Evitar usar un objeto para acceder a una variable o método de clase (static
). Usar el nombre de la clase en su lugar. Por ejemplo:
metodoDeClase(); //OK
UnaClase.metodoDeClase(); //OK
unObjeto.metodoDeClase(); //EVITAR!
11.3 Constantes
Las constantes numéricas (literales) no se deben codificar directamente, excepto -1, 0 y 1, que pueden aparecer en un bucle for
como contadores.
11.4 Asignaciones de variables
Evitar asignar el mismo valor a varias variables en la misma sentencia. Es difícil de leer. Ejemplo:
fooBar.fChar = barFoo.lchar = 'c'; // EVITAR!
No usar el operador de asignación en un lugar donde se pueda confundir con el de igualdad. Ejemplo:
if (c++ = d++) { // EVITAR! (Java lo rechaza)
...
}
Se debe escribir:
if ((c++ = d++) != 0 ) { // EVITAR! (Java lo rechaza)
...
}
No usar asignación embebidas como un intento de mejorar el rendimiento en tiempo de ejecución. Eses es trabajo del compilador. Ejemplo:
d = (a = b + c) + r; // EVITAR!
Se debe escribir:
a = b + c;
d = a + r;
11.5 Otros hábitos
11.5.1 Paréntesis
En general es una buena idea usar paréntesis en expresiones que implican distintos operadores para evitar problemas con el orden de precedencia de los operadores. Incluso sí parece claro el orden de precedencia de los operadores, podría no ser así para otros, no se debe asumir que otros programadores conozcan el orden de precedencia.
if (a == b && c == d) // EVITAR!
if ((a == b) && (c == d)) // CORRECTO
11.5.2 Valores de retorno
Intentar hacer que la estructura del programa se ajuste a su intención. Ejemplo:
if (expresionBooleana) {
return true;
} else {
return false;
}
En su lugar se debe escribir
return expresionBooleana;
Similarmente,
if (condicion) {
return x;
}
return y;
Se debe escribir:
return (condicion ? x : y);
11.5.3 Expresiones antes de “?” en el operador condicional
Si una expresión contiene un operador binario antes de ? en el operador ternario ?: , se debe colocar entre paréntesis. Ejemplo:
(x >= 0) ? x : -x;
11.5.4 Comentarios especiales
Usar XXXX en un comentario para indicar que algo tiene algún error pero funciona. Usar FIXME para indicar que algo tiene algún error y no funciona.