An instructor and student explain what makes a programming language functional: pure functions that always return the same result, immutable data, first-class functions that can be passed around like values, and lazy evaluation that delays computation. Elixir has all four, though copying data and treating functions as values can cost performance in large systems.
Chapters
¿Qué hace a un lenguaje funcional? Vamos a enumerar sus características. La primera sería funciones puras o sin efectos secundarios o colaterales.
Una función determinista, si usas siempre los mismos parámetros, debe retornar siempre el mismo resultado, como en matemáticas la suma de 1 y 2 siempre da 3.
Exacto, buen ejemplo, pero se complica con la computación porque tenemos elementos no deterministas como la red de comunicaciones, el disco duro, el teclado, el reloj o el generador de números aleatorios. Pasemos al segundo: inmutabilidad.
No se puede cambiar el contenido de una variable, pero si no puedo cambiar una variable, ¿sigue siendo una variable?
También tiene truco. Solo nos dicen que no podemos modificar, pero no dicen nada sobre eliminar. Como una hoja de papel escrita con bolígrafo: si necesitas cambiar algo, copia lo necesario cambiando lo que necesites y tiras la hoja anterior. No suena a que tenga buen rendimiento si tienes que copiar mucho.
Hay atajos y algoritmos que permiten realizar estos cambios inmutables de forma rápida.
¿Qué sigue? ¿Funciones de primera clase? ¡Funciones de alto standing!
¡Nada que ver! Es una forma de decir que las funciones pueden ser tratadas como datos.
Si un código que se ejecuta es un dato, entonces puede cambiarse. Tiene peor rendimiento que los lenguajes imperativos, pero merece la pena y sobre todo en proyectos grandes y con código distribuido. Discutible. Evaluación perezosa.
¿No la llaman ahora evaluación diferida, profe?
Pues sí, justamente eso. No realiza la evaluación de resultados si no es necesario.
Recapitulando, podemos decir que Elixir es un lenguaje funcional porque posee, como mínimo, una serie de características que son: funciones puras, inmutabilidad, funciones de primera clase y evaluación diferida.