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.