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