Características de los lenguajes funcionales.
La mayoría de los lenguajes de programación tienen el concepto de una función. Algunos lenguajes pueden llamarlo subrutina, método o procedimiento, pero son esencialmente lo mismo.
Por lo tanto, la persona que escucha la palabra "lenguaje funcional" por primera vez se siente incómoda. Suena como una palabra para lenguajes de programación en general. Pero ese no es el caso.
De hecho, el término lenguaje funcional no tiene una definición ampliamente aceptada y clara. Entonces, al comparar dos lenguajes específicos, Ruby y Elixir, explicaremos (parte de) las características de los lenguajes funcionales.
Tanto Ruby como Elixir manejan varios datos (entero, cadena de caracteres, tiempo, etc.) necesarios para la ejecución del programa nombrándolos. Este nombre se llama variable. Como ejemplo, consideremos el proceso de agregar
"!"
al final de la cadena señalada por la variable s
cuando su longitud es 3 o menos.
Ahora s
apunta a la cadena "abc"
. Esta cadena se almacena en una ubicación de memoria. En Ruby, estos datos pueden modificarse directamente a "abc!"
. Sin embargo, Elixir no puede alterar los datos en sí. En cambio, transforma los datos a otros datos. Específicamente,
"abc"
y "!"
se concatenan para crear la cadena "abc!"
, y nuevamente se asocia con la variable s
.
Aunque parece una diferencia menor, en realidad tiene un significado decisivo. ¿Qué sucede si dos programas
X
e Y
se ejecutan en paralelo en la misma computadora, ambos tienen una variable s
que se refiere a la cadena "abc"
almacenada en la misma ubicación en la memoria, y el proceso anterior se ejecuta casi simultáneamente en ambos programas?
En el caso de Ruby, algo malo sucede dependiendo del momento. Inmediatamente después de que
X
confirme que la longitud de la cadena señalada por la variable s
es 3, si Y
agrega "!"
a la misma cadena, X
también agrega "!"
después de eso, entonces finalmente la cadena señalada por la variable s
se cambiará a "abc!!"
.
Pero esto no sucede con Elixir. Esto se debe a que los datos originales se mantienen intactos y se crean nuevamente otros datos. En otras palabras, Elixir transforma los datos sin cambiarlos.
Por lo tanto, hay una diferencia significativa entre la alteración y la transformación. La característica más importante del lenguaje funcional Elixir es que los datos no pueden modificarse. Los programas escritos en Elixir proceden a través de una cadena de transformaciones de datos. Los lenguajes como Elixir se denominan funcionales porque esta transformación de datos es similar a una función matemática.
Por supuesto, si programa cuidadosamente en Ruby, los problemas anteriores no ocurrirán. Pero los humanos cometen errores. Elixir es más seguro en situaciones donde está involucrado el procesamiento paralelo.