Quizás todavía hemos hablado poco de Sonar, pero es necesario indicar que se trata una de las herramientas indispensables a la hora de crear código elegante. Básicamente, esta utilidad nos permite analizar nuestros proyectos en busca de código poco eficiente o mejorable, ordenando estas infracciones (suena mejor que violaciones) por su gravedad (blocker, critical, major, minor e info).

Con esfuerzo, hemos conseguido eliminar todas las infracciones críticas de nuestros proyectos, pero como sabemos que volveremos a tropezar dos veces con la misma piedra, necesitábamos algún tipo de recordatorio que nos permitiera tener siempre en mente el no volver a cometer esas infracciones.

De ahí surgió la idea de crear una tabla con los diez mandamientos de Java. Aquí tenéis la versión final. Explicaré cada punto en detalle.

Los 10 mandamientos de Java
I. Thou shall not access non-static variables in a static manner.

Esta infracción se repetía bastante en nuestro código. Si tenemos un método estático , no debería poder acceder a variables que no están pensadas para llamarse de forma estática. El compilador lo permitirá, claro, pero manda al garete la filosofía de los métodos estáticos.

II. Do not write a static variable from an instance method. Ever.

Parecida a la anterior, pero al contrario. Si tenemos una variable estática, no deberíamos poder escribirla desde un método perteneciente a un objeto instanciado. Sirva de ejemplo:

private static String mTitle;
...
public void showDialog(String title, String message) {
   mTitle = title;

III. Thou shall not leave empty if-else/switch statements.

¿Cuántas veces habrá pasado? Dejamos un todo en el if y asunto resuelto. Pues a partir de ahora, pecado mortal.

if (item != null) {
   newPurchase();
} else {
   // no purchase yet
}

Aunque no lo pone, esto también se aplica a los bucles vacíos.

IV. Thou shall not repeat code in a if-else/switch statement.

A veces por dejadez, mantenemos dos bloques de un condicional exactamente iguales. Veamos un ejemplo con un switch:

switch(gafas){
   case 1: return "de lejos"; break;
   case 2: return "progresivas"; break;
   case 3: return "del cerca"; break;
   default: return "de lejos"; break;
}

Podría modificarse quitando el caso 1 o fusionándolo con el default.

V. Thou shall not leave a private method not being called from anywhere.

Sencillo: no creemos métodos que no sean utilizados en ninguna parte. Si el título del metodo tiene un rayica amarilla, mal asunto. Siguiente.

VI. Remember to not null-check a value which is already null.

Si estamos seguros al 100% de que algo tiene como valor null, no tiene sentido hacer una comprobación. Lo mismo para el caso contrario: si es imposible que una variable tenga valor null, resulta redundante el comprobarlo.

VII. Thou shall not use short variable names.

Pecadores todos aquellos que utilizáis nombres de variables como "cursor c", "RelativeLayout rl" o "String s". Quedan excluidas las variables de iteración dentro de un bucle.

VIII. Do not take the visibility of variables in vain

Qué bonito sería el mundo si todas las variables fueran public. Nos ahorraríamos más de un disgusto. Pero si una variable sólo se utiliza dentro de el entorno de una clase, debemos declararla como private, o arder en el infierno. Lo mismo con protected, claro.

IX. Remember to write javadocs and keep it holy.

Método que dejamos sin Javadoc, 10 flagelaciones.

X. Avoid duplicate literals, if it is repeating, create a variable.

if (numPiscinas == 1) {
   show("mensaje", 1);
} else if (numPiscinas == 2) {
   show("mensaje", 2);
} else if (numPiscinas >= 3) {
   show("mensaje", 4);
}

Si la cadena "mensaje" es usada en el código continuamente, mejor escribir una variable propia con la cadena, que seguro que nos resuelve la vida.

Y eso es todo. Podemos crear código sin hacer caso de estos mandamientos, y obtendremos un buen resultado. Pero seguro que si los seguimos a rajatabla, adquirimos unas costumbres de programación muy saludables. Por supuesto, estos puntos son cuestionables, no se trata de los más críticos, sino simplemente de los que más suelen repetirse en nuestro código. Os animo a que elaboréis vuestra propia lista de mandamientos y la colguéis bien alta para tenerla siempre en mente. Y para acabar, me despediré con una frase de Charles Reade:

"Siembra un acto y cosecharás una costumbre. Siembra una costumbre y cosecharás un carácter. Siembra un carácter y cosecharás un destino."