Os presento al antipatrón for-if

Todos lo hemos escrito alguna vez, por prisas, es tarde y queremos irnos a casa, estamos agotados ...

Lo cierto es que a todos nos pasa, al menos a mi y termino escribiendo cosas como:

for (int i = 0; i < 100; i++) {
if (i == 42) { hagoAlgo(i); }
}

Lo más normal es haber escrito:

hagoAlgo(42);

Este anti-patrón tiene muchas formas. Por ejemplo:

foreach (string filename in Directory.GetFiles("."))
{
if (filename.Equals("desktop.ini", StringComparison.OrdinalIgnoreCase))
{
return new StreamReader(filename);
}
}

Buscamos el archivo que se llame "desktop.ini" y devolvemos el stream, sip, cuando lo más natural, una vez visto esto, es haber escrito algo así:

if (File.Exists("desktop.ini"))
{
return new StreamReader("desktop.ini");
}

Por favor, tomémonos las cosas con más calma que luego pasa lo que pasa.

El problema es que esto es sólo una parte del código, si sumamos todas las "patochadas" que hacemos sin pensar resulta que tenemos un proyecto lleno de cosas como esta y terminamos preguntándonos ¿esto lo he hecho yo?. Pero aún peor cuando un compañero o tu mismo jefe ve este tipo de cosas.

Desde aquí pido mis más sinceras disculpas por escribir este tipo de cosas.

Y es que no me doy ni cuenta y llamo a esta forma de programar JITO ("Just In Time Obfuscation").

Espero que os sirva.

Juan María Laó Ramos.

 

 

4 pensamientos en “Os presento al antipatrón for-if

  1. David

    ¿Y porqué es un antipatrón? ¿Solo porque tiene otra forma de escribirse?

    A veces, este antipatron favorece la rapida lectura, si tuviésemos que hacer caso de gran parte de los antipatrones haríamos 200 millones de métodos con nombres absurdamente largos para un simple “HelloWorld”.

    Solo decir que, a mi modo de verlo, esta práctica no tiene porqué ser llamada antipatrón necesariamente

    1. Juanma Autor

      No estoy dicieno que tengamos que aplicar patrones a todo lo que se nos pone por delante, eso es otro antipatrón.
      Lo que estoy diciendo es que ese código no es todo lo óptimo que deberíay que suele aparecer cuando modificamos, rectificamos, estamos cansados y nos queremos ir.

      ¿No es más correcto, eficiente, mantenible y entendible:

      hagoAlgo(42);

      que:

      for (int i = 0; i < 100; i++) { if (i == 42) { hagoAlgo(i); } } ? El primero es de orden 1 y el segundo es de orden 100. Pero esto no es más que un ejemplo sencillo, y que también me he encontrado en código que he escrito yo simplemente por "mirar" el código y no "verlo".

  2. julian

    yo no diria que es un antipatron, es un DESASTRE, nunca se me ocurriria hacer algo asi.
    hacer un for para llegar a un numero que yase cual es? no tiene ningun sentido.

Los comentarios están cerrados.