PMD, los nazis y las clases abstractas

Ya he comentado en alguna ocasión lo arbitrarias que me parecen algunas reglas de PMD y Checkstyle, y lo fácil que es darle un mal uso a una herramienta como Sonar.

Pues esta semana me ha tocado trabajar en la conformidad con PMD y me he llevado una desagradable sorpresa en forma de mensaje de error: "Abstract classes should be named 'AbstractXXX'." Y nada menos que un error crítico, la segunda categoría más importante.

Podría decirlo de muchas formas, pero para qué... los desarrolladores de PMD son UNOS PUTOS NAZIS.

Y el caso es que hace mucho tiempo que tengo abierto el blog, y nadie se había dignado hasta ahora a validar la Ley de Godwin. No sé cómo tomármelo.

En fin, que me desvío del tema: hoy por hoy, esa regla es una gilipollez. Es un arcaísmo proveniente de aquella oscura época en la que se programaba con el Vi directamente en la consola, al igual que comenzar los nombres de las interfaces con una I, o los nombres de las variables con la inicial del tipo de dato. En resumen: por legibilidad.

Pero estamos en 2016, cojones. Nadie en su sano juicio pica sin un IDE, el cual te permite saber si una clase es abstracta sólo con dejar el ratón encima del nombre. Y por si eso es muy engorroso para ti, jodido hipster, el IDE suele detectar los errores de compilación sin que haga falta que muevas un dedo.

Pero vamos, que no tienes que creerme a mí que soy un don nadie, Adam Bien ya dijo lo mismo hace varios años sobre las clases abstractas y sobre las interfaces. Bueno, salvando el caso en el que Abstract tenga un significado real para la clase como, por ejemplo, AbstractIdea.

¿Perdona? ¿Que no es más que una regla y la puedes desactivar si te apetece? ¡Válgame el señol! Pues claro que sí, excepto si no puedes porque no eres tú quien decide qué se aplica, como es mi caso.

Pero eso es lo de menos, lo que me toca las narices es que esa regla esté ahí. ¿Qué pasa si yo quiero añadir una regla que sea "Las clases abstractas no pueden empezar por Abstract"? ¿Me lo van a admitir? ¿Coexistirían las dos? ¿Quién tiene razón aquí? ¿Cómo se demuestra qué aproximación es mejor?

Y me sé de cierto proyecto bastante de moda hoy en día que prefija con una I sus interfaces...

Autor

Héctor

Viendo los bytes pasar desde mi ventana