intive Argentina Blog

La programación funcional

Mientras algunos hemos sido introducidos a la programación funcional dentro del marco académico, otros simplemente han escuchado sobre el tema, o lo han puesto en práctica en base a las implementaciones que ofrecen algunos lenguajes del mercado. En el segundo caso, podría ocurrir que se pierda la esencia del concepto de programación funcional. Acentuando este hecho, muchas veces omitimos la palabra “paradigma”. Mi objetivo entonces, es aclarar lo que entendemos por paradigma de programación funcional y responder una serie de preguntas que se encuentran implícitas al traer el tema a discusión: ¿Para qué sirve? ¿Es una moda? ¿Es algo meramente teórico?

Los paradigmas

Para la ciencia, un paradigma es un modelo de cómo deben realizarse las investigaciones y experimentos científicos, con la concepción en mente de que este modelo pueda replicarse. Además de ser un modelo experimental, un paradigma abarca también la manera en que los agentes del campo científico entienden, piensan y hacen ciencia.

Yendo apenas un poco más lejos, el paradigma tratará de explicar y acomodar el comportamiento de algunos aspectos del mundo real, bajo un punto de vista prácticamente uniforme. Durante el transcurso del paradigma legítimo, es decir, aquel que rige la manera de concebir al mundo, ocurrirán problemas que parecerán irresolubles. En caso de que el paradigma no pueda superar estas dificultades se entrará en un estado de “crisis”, que podrá resolverse cuando un nuevo paradigma gane más seguidores y derribe completamente al original.

Y todo esto, ¿Qué tiene que ver con programar?

Bueno, ahí llego:

  • La definición de paradigma aplica a la manera en que los programadores entienden, piensan y hacen programas. Define las herramientas conceptuales que se pueden usar y las formas válidas de combinarlas.
  • Un paradigma de programación tratará de resolver problemas desde un punto de vista casi totalmente uniforme.
  • Cuando el paradigma de programación comienza a quedar chico frente a los nuevos desafíos del mundo y aparecen otros paradigmas menos legítimos pero que sí resuelven estos nuevos problemas, comienza una transición.

El paradigma de la programación funcional

Ahora bien, ¿qué lugar ocupa la programación funcional si nos basamos en la definición del paradigma científico?

  • El paradigma imperativo

En un principio, nuestro paradigma por excelencia era el imperativo. En líneas generales, tomábamos un estado global y lo hacíamos atravesar una serie de pasos que iban transformándolo hasta conseguir un resultado final, el producto de esas transformaciones.
Dentro de ese paradigma, cada paso depende del anterior, por ende, no puede reutilizarse, sino que solo tiene sentido en el contexto de los anteriores. Para comprender qué hace cada paso, además, es necesario comprender el flujo completo, debido a su interdependencia. Este caso es claramente la solución a un problema en particular.

  • El paradigma orientado a objetos

Luego, en el paradigma orientado a objetos, se produce una modularización de aquella secuencia que planteamos en el caso anterior. Lo único que consigue la encapsulación, es la ruptura de este estado global en piezas más pequeñas que se esconden en estructuras de datos con el nombre de clases. Pero lo clave es, que no se ataca el problema fundamental a nivel de paradigma, sino que se esconde en los objetos la implementación y se logra combinarlos entre sí para que colaboren. Se llega a un nivel de abstracción mayor, es cierto, pero también se esconden en los objetos dos cosas que no deberían perderse de vista: la mutabilidad del estado y la compartición de datos. Ambas cosas no se llevan bien con los problemas de concurrencia y la paralelización, que podríamos llegar a tener.

  • El paradigma de programación funcional

Finalmente, llegamos al paradigma de programación funcional, en donde lo que se elimina, en lugar del estado global, es la mutabilidad. A diferencia de sus anteriores, este paradigma establece como unidad fundamental a la función. La idea es desarrollar funciones puras y componerlas como funciones matemáticas. De esta manera, se puede aprovechar una manera sistemática (y ya probada) de componer pequeñas piezas de código en mayores. Así, se dispone de una gran variedad de modelos matemáticos que se podrían utilizar.

Las ventajas del paradigma de la programación funcional

Con funcional, disponemos de un método para crear teorías sobre problemas de dominio, y desarrollamos un código más resistente al cambio que aquel generado por sus antecesores.

La adopción de esta forma de concebir los problemas nos brinda una serie de ventajas, tales como:

  • Facilitar el test unitario.
  • Reducir los bugs producto de la mutabilidad.
  • Separar la lógica de negocio del control de la aplicación.
  • Lograr mayor facilidad para demostrar su validez, gracias a su base matemática.

¿Qué NO es un paradigma de programación?

¿Cuántas veces hemos escuchado decir que alguien “usa Scrum” simplemente porque se reúne una vez por día a comentar lo que cada uno está haciendo? Indagando un poco más, nos encontramos con que esas reuniones suelen durar cuarenta minutos, no están moderadas y cada uno cuenta con gran nivel de detalle lo que está haciendo. Entonces, no podemos decir que se está usando Scrum. ¿Por qué? Porque Scrum, como marco conceptual, exige una serie de normas, leyes, reglas o lineamientos que al no respetarse, hacen que se salga de la forma de pensar que exige el mismo.
Esto no invalida a las personas que decidan hacer su trabajo de esta manera, simplemente invalida el hecho de que están usando ese paradigma, porque el paradigma es quien rige la forma de realizar el trabajo.

Lo mismo ocurre cuando algunos lenguajes implementan funciones propias del paradigma funcional. Aquellos que no conocen las ideas del paradigma, se limitan a pronunciarse funcionales simplemente por usar un “map” o una función de ese estilo. Para poder entender realmente la forma en que trabaja este paradigma (así como la de cualquier otro), es necesario conocer sus reglas y motivaciones, tema que requiere otro apartado. No basta con usar las implementaciones del lenguaje, ni con aprovechar una mínima parte del paradigma para justificar que uno lo está usando.

¿Cómo pensar a la programación funcional?

Es realmente necesario pensar a la programación desde el punto de vista del paradigma que adoptemos, ya que de esa forma lograremos cohesión en la manera de resolver problemas y haremos mucho más fácil la reutilización de código en el largo plazo. Pensar desde ese punto de vista, exige conocer las herramientas y las reglas que nos propone el paradigma.

No está de más destacar que bajo ningún concepto se pretende invalidar otros paradigmas. De hecho, es contundente que el paradigma orientado a objetos nos ha sido muy útil. Lo importante es tener en claro las propuestas de los paradigmas más destacados, para poder tomar una buena decisión a la  hora de modelar una solución. Quizás ocurra progresivamente un reposicionamiento del paradigma funcional por todas las ventajas ya expuestas, pero lo importante, reitero, es no perder la visión crítica e indagar sobre las herramientas que necesito, averiguando cuál de ellos me ofrece un mejor marco para pensar y resolver.

Por último, tengamos en cuenta que los lenguajes nos proveen implementaciones para las herramientas conceptuales descritas en los paradigmas. Mientras que algunos lenguajes se centran estrictamente en las ideas de un solo paradigma, otros permiten la combinación de varios. Sin embargo, el paradigma tiene mucho más que ver con el proceso mental que se utiliza para desarrollar una aplicación, que con el lenguaje.

La principal ventaja del paradigma es poder reutilizar código, disminuir el impacto de los cambios y reducir la cantidad de posibles bugs. Recordemos que, más allá de que pudiésemos algunos concebir a la programación como un arte o expresión, lo único que importa al final de cuentas, es si pudimos resolver un problema en el menor tiempo posible.

Gastón Villar

Gastón Villar es desarrollador Frontend en intive-FDV desde enero de 2018. Estudiante de Ingeniería en Sistemas de la Información en la Universidad Tecnológica Nacional (UTN), Gastón es un fanático confeso de los idiomas: estudió chino, francés, y ahora está comenzando su aprendizaje del alemán. Entre sus principales hobbies se encuentran asistir al teatro, salir con amigos y leer.

Deja un comentario