Design a site like this with WordPress.com
Get started

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.

 

 

Author: Juanma

Bueno, como reza el título de este blog y de las cosas que iré escribiendo ya os hareis una idea de cómo soy.

4 thoughts on “Os presento al antipatrón for-if”

  1. ¿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

    Like

    1. 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".

      Like

  2. 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.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: