Prácticas de Programación Infames: OpenJDK
Más de una vez (y de dos) he oído hablar sobre extrañas normas no escritas (o eso espero) sobre «buenas prácticas» de programación. De entre todas ellas, me permito destacar:
- El break solo se puede usar en los switch (en cada case).
- Usar el continue es un pecado capital, al infierno de cabeza.
- El return solo puede ir en la última línea de una función o método, y únicamente para retornar algo. De lo contrario sufrirás indecible tormento.
- Y la clásica: Usar el goto está penado con sufrimiento eterno.
Por curiosidad le he estado echando un vistazo a OpenJDK, que es la implementación de Java que liberó Sun no hace tanto (y de la que sigue siendo propietario). El código es en su mayoría Java, C y C++. He sacado unos números (no me atrevo a decir métricas) sobre el directorio source/openjdk/jdk/src. Conste que esto es muy burdo y que no he hecho ningún tipo de filtrado, así que los números reales pueden variar bastante, aunque creo que sirven para hacerse una idea aproximada.
Primero un cálculo de LOC, para saber de qué cantidad de código estamos hablando.
Y unos “grep’s” con resultados curiosos:
No es fácil saber si esos break’s corresponden todos a esos case. El siguiente dato demuestra que al menos hay algunos que no se usan únicamente para terminar un case. Esto solo cuenta aquellas sentencias en el que el if y el break
están en la misma línea. Echando un vistazo al código es fácil encontrar break
dentro del bloque de un if
o else
pero eso no es tan fácil de contabilizar con grep
.
Y por último:
Contabilizar el número de funciones y métodos no es nada fácil, por lo que no es fácil saber si hay más de un return por función. Sin embargo, el siguiente dato deja claro que al menos utilizan bastante return para terminar “contranatura” funciones y métodos void:
Y lo mismo que dije del break
es aplicable para detectar el uso de continue
y return
en una sentencia condicional:
Prometo refinar estos números cuando tenga tiempo.
Conclusión: La gente de Sun no tiene ni idea de programar…