viernes, 21 de septiembre de 2012

Por que es bueno que aprenda programación funcional??


Los orígenes de la programación funcional pueden rastrearse al matemático Alonzo Church, que trabajaba en la Universidad de Princeton, y, al igual que otros matemáticos de allí, estaba interesado
en la matemática abstracta, particularmente en el poder computacional de ciertas máquinas abstractas. Las preguntas que se hacía eran por ejemplo: si dispusiésemos de máquinas de un ilimitado poder de cómputo, ¿qué tipos de problemas se podrían solucionar?, o ¿se pueden resolver todos los problemas?

Para contestar este tipo de preguntas, Church desarrolló un lenguaje abstracto, denominado Cálculo Lambda, que el cual sólo realizaba evaluación de expresiones usando funciones como mecanismo de cómputo. Este lenguaje abstracto no tenía en cuenta limitaciones concretas de implementación de ningún tipo.

La programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda.

La historia estuvo muy linda, pero que agrega a mi vida? Existen muchos conceptos que es bueno saber a la hora de abordar un problema; además estos conceptos no se encuentran solo en lenguajes funcionales.

En la programación funcional, todo es una función, no existen variables, if, while o for o otra estructura de control de flujo de ejecución; solo funciones. Veamos  características de los lenguajes funcionales:

  • Transparencia referencial : Como se apoya en el concepto de función matemática, una función siempre va a devolver el mismo resultado para los mismos parámetros, es decir el resultado de una función no se va modificar a lo largo de la ejecución por algún estado del programa.
  • Evaluación perezosa (Lazy evaluation), permite decirle a una función que se ejecute en otro momento, puedo pasar la una función con sus parámetros por parametro a otra función y cuando la otra función necesite realmente ese valor ejecutar la función.  
  • Closures, es la capacidad de guardar en una variable una función para luego ejecutarla; esto permite que sea más fácil. 
  • Etc...

Hoy en día existen diversos lenguajes funcionales. Se podría considerar como uno de los primeros lenguajes funcionales al LISP, que actualmente sigue en uso, sobre todo en áreas de la inteligencia artificial. También un pionero de este paradigma es APL desarrollado en los años 60 (Iverson 1962). El linaje funcional se enriqueció en los años 70, con el aporte de Robin Milner de la Universidad de Edimburgo al crear el lenguaje ML. Éste se subdividió posteriormente en varios dialectos tales como Objective Caml y Standard ML. A fines de los años 80, a partir de un comité, se creó el lenguaje Haskell, en un intento de reunir varias ideas dispersas en los diferentes lenguajes funcionales (un intento de estandarizar el paradigma). Este año Microsoft Research ha incluido un nuevo lenguaje (funcional), denominado F#, a su plataforma .NET.

Si queres aprender Haskel acrodate de este post:

Y si queres probar Haskell: