Portada arrow Artículos arrow Un solo punto de salida en cada método o función
Un solo punto de salida en cada método o función
jueves, 07 de diciembre de 2006
Aunque estoy seguro de que muchos programadores no están de acuerdo en este punto, creo firmemente que es más elegante mantener un solo punto de salida en cada método o función, ya que facilita la comprensión de los métodos, y sobre todo, su depuración, pruebas y mantenimiento.

Prácticamente ningún lenguaje actual permite que las funciones tengan más de un punto de entrada. Algunos lenguajes (como Pascal) no permiten tampoco que una función (o método) tenga más de un punto de salida. Sin embargo, todos los que han derivado de C, como C++, Java o C# y muchos otros sí lo permiten. Como decía antes, hay bastante gente que no está de acuerdo con este planteamiento de tener un único punto de salida en cada función (o método), y en ocasiones esgrimen argumentos de cierto peso.

Como esto de la elegancia, a veces, es cuestión de opiniones, cada uno tiene la suya. La mía, viene influienciada por el teorema de Böhm-Jacopini, que toma como premisa, entre otras, que todo algoritmo debe tener un único punto de entrada y uno de salida. Está uno tan acostumbrado a esto, que aun siendo consciente de que tener más de un punto de salida no suele plantear problemas demasiado graves, sí estoy convencido de que dificulta la depuración, pruebas y mantenimiento... y en algunas ocasiones (raras, eso sí) no permite demostrar que el algoritmo sea correcto.

Pero bueno... ¿Qué es eso de tener más de un punto de salida? Muy sencillo. Observa este código en C#.

1   //Este método devuelve el doble de a
2   //si a es par, y devuelve a tal cual si
3   //no lo es.
4   static int prueba(int a)
5   {
6       if (a % 2 == 0)
7           return a * 2;
8       else
9           return a;
10  }
 

Como puedes observar, tiene un solo punto de entrada, la línea 6 es siempre la primera que se ejecuta. Sin embargo, tiene dos puntos de salida: puede terminar en la línea 7 o en la línea 9. Por supuesto, que en este ejemplo tan tonto, esto no plantea el mayor problema. Sin embargo, imagina que este método tiene muchas más líneas, condiciones, bucles... etc. y distintos puntos de salida por enmedio. Hacer trazas o demostrar propiedades acerca del método se complica bastante.

Una forma más elegante de hacer esto, utilizando un sólo punto de salida podría ser esta:

1   static int prueba(int a)
2   {
3       int resultado;
4       if (a % 2 == 0)
5           resultado = a * 2;
6       else
7           resultado = a;
8        return resultado;
9   }
 

Ahora hemos dejado un sólo punto de entrada (la línea 3) y uno solo de salida (la línea 8). Sea cual sea el flujo de ejecución que se siga, siempre se sale de este método por la línea 8.

 
←Artículo anterior   Artículo siguiente→

Categorías

  • Ingeniería del software  ( 3 artículos )

    Acerca de la ingeniería del software y el ciclo de vida del software.

  • El programador elegante  ( 12 artículos )
    Una serie de artículos dedicados a buenas prácticas en programación
  • Opinión  ( 7 artículos )

    Artículos de opinión, no necesariamente fundamentada.

  • Básico  ( 12 artículos )

    Artículos básicos sobre temas básicos.

     

Suscríbete

RSS feed Sindicación RSS

(¿Qué es la sindicación RSS?)


Suscribir por e-mail

¿Dónde estoy?

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, informática, tecnología, ciencia, ingeniería, internet... y cualquier tontería que se nos ocurra. El punto de vista de nuestros artículos técnicos suele ser muy básico, así que a menudo adoptamos grandes simplificaciones. (Más...-Términos de uso)