De la implementación del Universo en Java y los Monty Python
Cerúlea se me ha quedado la cara leyendo el comentario al post de ayer de mi buen amigo Malasombra. Y es que este ladino personaje sabe dar donde duele: primeramente, en la entrepierna, y, a continuación, en el orgullo. El mero hecho de hablar de algo y no mentar a los Monty Python ya debiera hacerme arrastrar por el barro avergonzándome de dejar en el olvido sus aportaciones al siempre infravalorado mundo de la programación spaghetti.
Siguiendo al hilo de las sanas costumbres programáticas según las cuales se puede uno hacer imprescindible para cualquier modificación de lo ya codificado e instalado en cliente, siempre se pueden aprender emocionantes y novedosas técnicas. Me van a tener que permitir citar el ejemplo original en la lengua de Shakespeare:
Use constant names like LancelotsFavouriteColour instead of blue and assign it hex value of $0204FB. The color looks identical to pure blue on the screen, and a maintenance programmer would have to work out 0204FB (or use some graphic tool) to know what it looks like. Only someone intimately familiar with Monty Python and the Holy Grail would know that Lancelot's favorite color was blue. If a maintenance programmer can't quote entire Monty Python movies from memory, he or she has no business being a programmer.¡Qué belleza!, ¡qué elegancia!, ¡qué sofisticación!, ¡qué maravilloso compendio de mala leche y profundo conocimiento de los más intrincados mecanismos de codificación de una simple variable!.
Sin embargo, quien piense que este nivel de malsana inquina es difícilmente superable, no ha visto el siguiente ejemplo:
Bello, ¿no es cierto? Para el lector bienintencionado o el ojo poco entrenado no es más que la suma de todos los valores contenidos en un cierto array, pero, bajo la perversa mano del programador extremo, esto es lo que en realidad está codificado:for(j=0; j < myArray.length; j+=8)
{
total += myArray[j+0];
total += myArray[j+1];
total += myArray[j+2]; /* Main body of
total += myArray[j+3]; * loop is unrolled
total += myArray[j+4]; * for greater speed.
total += myArray[j+5]; */
total += myArray[j+6];
total += myArray[j+7];
}
¡Cuánta pérfida perfección contenida en tan pocas líneas! ¡Bjarne Stroustrup se revolvería en su tumba de no ser porque el hijo de puta aún sigue vivo!for(j=0; j < myArray.length; j+=8)
{
total += myArray[j+0];
total += myArray[j+1];
total += myArray[j+2]; /* Main body of
total += myArray[j+3]; * loop is unrolled
total += myArray[j+4]; * for greater speed.
total += myArray[j+5]; */
total += myArray[j+6];
total += myArray[j+7];
}
Ahora, si alguien espera que retome el tema que me había traído aquí, que no era otro que el de codificar el universo en Java según el punto de vista Pythoniano, va de culo.
No obstante, y por pegarme la machada de cara a la galería, ahí dejo lo siguiente:
public interface HijoDeDios extends Dios {...}
public abstract class Hombre implements HijoDeDios,
Serializable {
...
public static boolean isPringao() {
return true;
}
...
}
public abstract class Mujer implements HijoDeDios,
Serializable {
...
public Mujer (Costilla costilla);
public static boolean isGolfa() {
return true;
}
public final void tenerConversacion()
throws UndefinedException {
throw
new UndefinedException("Método no implementado");
}
...
}
public class Pringao extends Hombre {...}
public class Golfa extends Mujer {...}
Hombre adan = new Pringao();
Mujer eva = new Golfa(adan.getCostilla();Y para satisfacer personalmente a nuestro querido Pedro, usamos el Factory para la creación del sentido de la vida:
SentidoDeLaVida sdv = new SentidoDeLaVidaFactory()
.getSentidoDeLaVida("Monty Python",
hijoDeDios.getDatosUsuario());
universo.put("sentidoDeLaVida", sdv);
Queridos niños: como hemos visto en la llamada al constructor, la implementación del sentido de la vida depende de cada hijo de Dios. Buscad el vuestro y, cuando lo encontréis, haced el favor de no venir a tocar los cojones a los desgraciados de siempre.
PD: Para más información acerca de los antipatrones de diseño, no me preguntéis a mí. ;)

