Programación Funcional

Si, como yo, habéis tenido la suerte/desgracia (apliquensé los dos términos) de estudiar programación funcional en la carrera (haskell, lisp, hope o variantes) sin duda pensaríais que aquello era lo menos práctico y lo más inútil que había para programar, en especial si antes ya habíais programado en algún lenguaje imperativo como c o pascarl.

El problema, en mi opinión que viene de mi caso concreto, viene del hecho de que en la universidad se limitan a enseñarte el como, dandote una introducción a la programación funcional y la programación en general, sin preocuparse de enseñarte las ventajas que tiene, y las tiene, muchas.

Por ejemplo, no estaría mal comenzar diciendo que la programación funcional (el cálculo lambda en el que esta se basa) es tan potente (y es demostrable matemáticamente hablando) como el cálculo basado en máquinas de turing (la base de la programación imperativa). Y si ya después de eso presentamos las ventajas como lo hacen en este excelente artículo sobre programación funcional de defmacro, quizá no saldríamos tan asustados de la programación funcional.

El artículo está en inglés pero realmente merece la pena y estoy seguro de que cambiará vuestra visión del asunto, por citar, para los que no se les de muy bien el inglés voy a repasar un par de ventajas (aunque, de verdad, para comprender el concepto global es muy importante leer el artículo):

  • En primer lugar hay que resaltar que, en programación funcional, la ejecución de una función tan solo depende de los parametros de entrada, por lo que dada una entrada siempre produce la misma salida, esto, como veremos, tiene inumerables ventajas.
  • Testeo de unidades: Dado lo anterior, veremos que es extremadamente sencillo realizar y verificar el testeo de unidades ya que cada función tan solo depende de si misma, no del estado de otros objetos, de variables globales, etc.
  • Concurrencia: Esto es díficil de explicar aquí, sin el resto del artículo, pero dada la independencia relativa de las funciones podemos concluir que, si una función no utiliza ningún dato producto de otra, esas dos funciones siempre se podrán ejecutar concurrentemente, sin intervención del programador, ya que como se ha dicho, una función solo depende de los datos de entrada y proporciona unos datos de salida, no modifica el estado de la aplicación cosa que no se puede garantizar en una aplicación imperativa.
  • Debug: De nuevo el mismo argumento que antes. Puesto que cada funcion tan solo depende de los parametros de entrada, el debug está garantizado que es determinístico, es decir, no depende del estado de la aplicación que una función devuelva 1 o 0, verdadero o falso.

Esto es solo un poco por encima y realmente merece la pena leer el artículo para comprender cada cosa en profundidad.

Otros links: Erlang. Erlang es un lenguaje de programación concurrente y de uso en numerosas aplicaciones comerciales que, de hecho, prueba en gran medida los conceptos explicados anteriormente.

3
Average: 3 (1 vote)
Your rating: None