Marco Ordoñez

¿Porqué usar programación funcional?

Este post está basado en el paper "Why Functional Programming Matters" de John Hughes.

  1. La programación funcional no tienen variables, una vez declarado un valor este no puede cambiar y solo esto ayuda a eliminar una gran parte de errores presentados por la reasignación. A raiz de esta inmutabilidad el orden de ejecución termina siendo irrelevante liberando al programador de la carga de definir estructuras de control.

  2. Los programas tienden a ser mas pequeños (con menos texto escrito) y como argumento se puede decir que los programas convencionales están compuestos de un 90% de declaraciones de asignación y esto puede ser omitido en la programación funcional.

  3. Al resolver un problema lo más común es dividir este problema en partes más pequeñas y luego unir esas soluciones para resolver el problema inicial. John Hughes menciona que es importante tener buena "goma" para unir las soluciones y presenta dos nuevas "gomas", una de ellas es la composición de funciones (por ejemplo foldr) y la otra es la composición de programas ya que un programa es una función desde su entrada hasta su salida.

  4. De la composición de programas aparece la evaluación perezosa que permite que los dos programas sean ejecutados en sincronización estricta, por ejemplo \(g (f (input))\), el programa f solo se ejecutará cuando g intente leer el input, luego f se suspende y g continúa hasta que intente leer otro input. Como bonus adicional, si g termina sin leer todo el output de f, f también es terminado.

El paper muestra ejemplos de programación funcional en cada punto, es muy recomendado leer el paper completo que lo pueden encontrar en el siguiente enlace:

Why functional programming matters by John Hughes

Para agregar a lo expuesto anteriormente, personalmente creo que la programación funcional es una forma mucho más segura, compacta y clara de escribir programas, esto sin mencionar que su naturaleza inmutable hace que las condiciones de carrera sean eliminadas y facilita la programación paralela.

Otro punto muy importante a mencionar es que la programación funcional trae consigo muchos conceptos nuevos como el cálculo lambda, la transparencia referencial, inmutabilidad, funciones de orden superior, currificación, composición de funciones, recursividad, teoría de categorías, entre otros.

Muchos programadores expresan abiertamente que conocer sobre la programación funcional los ha ayudad a ser mejores programadores y coincido completamente.

En la actualidad muchos lenguajes han incluido características funcionales y muchos desarrolladores las usan sin saberlo, si estás leyendo este post te aliento a que no seas uno más de esos y conozcas más sobre el fascinante mundo de la programación funcional.

Marco Ordonez