arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Elixir el lenguaje de programación

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 6 Min. de lectura

remove_red_eye 82125 visitas

calendar_today 29 Abril 2018

Quizás hayas oído hablar acerca de Elixir, y aun no te quede del todo claro de que se trata 🤔, ¿Quizás una librería? ¿Algún framework? o algo por el estilo ... Pues bien, este post vamos a hablar acerca de Elixir, sus características, cubriremos un poco de la sintaxis del lenguaje y analizaremos si vale o no la pena aprender esta nueva tecnología (Spoiler: Sí vale mucho la pena).

Elixir

La pregunta obligada aquí es ¿Qué es Elixir? Bien, podemos definir a Elixir como un lenguaje de programación dinámico y funcional, diseñado para crear aplicaciones escalables y mantenibles.

Elixir fue creado en el año 2012 por José Valim. En comparación con otros lenguajes, Elixir es una tecnología bastante nueva, sin embargo, esto no debería engañarnos, que sea un lenguaje nuevo no significa que sea frágil o que existan bugs. De hecho, Elixir se distingue por ser estable y robusto, principalmente porque los programas creados en este lenguaje se ejecutan en la máquina virtual de Erlang (BEAM).

Nuestros programas se compilan dando como resultado bytecode, que posteriormente será ejecutado por la maquina virtual. Utilizar la maquina virtual de Erlang tiene muchas ventajas, entre ellas destaca que dentro de nuestros programas podemos hacer uso funcionalidades de Erlang, algo que en lo personal me parece bastante interesante.

Un dato curioso es que José Valim es un amante programador de Ruby on Rails. Si has programado en Rails es probable que notes las mejores prácticas del framework en Elixir, así como una sintaxis bastante familiar.

Cuando nos encontremos desarrollando en Elixir lo haremos utilizando el paradigma de programación funcional, dejaremos a un lado el tema de objetos y nos concentraremos principalmente en funciones y módulos.

Es probable que si nunca antes has programado de forma funcional, tus primeros programas te provoquen algunas dolores de cabeza o el código que escribas te parezca ilegible, pero no te preocupes, la programación funcional tiene enormes beneficios y con suficiente práctica, podrás dominarla.

Sintaxis

El ejercicio obligatorio para todos aquellos que nos encontramos aprendiendo un nuevo lenguaje de programación es el clásico Hola Mundo. En Elixir el código sería el siguiente:

IO.puts "Hola Mundo"

En este caso, puts es una función. Cuando mandamos a llamar una función en Elixir, podemos omitir los paréntesis, como podemos observar.

Una vez que hayamos escrito nuestro primer Hola Mundo , es momento de aprender a declarar variables.

Como mencionamos anteriormente, Elixir es un lenguaje dinámico, así que no hay necesidad de especificar el tipo de un dato a utilizar, este, se asigna en tiempo de ejecución. Compilado y dinámico, cool 😎. Aquí unos ejemplos.

#Variables

curso = "Elixir"
version = 1.6
completado = true
#Con <> podemos concatenar strings!
titulo = "Curso de " <> curso <> "." 

Con # comentamos nuestro código y con <> podemos concatenar strings.

Hasta aquí todo bien ¿no?

Algo que me gusta mucho de Elixir es el Pattern Matching. Este es un concepto bastante importante y poderoso, involucrado incluso en el tema de la declaración de variables, es por ello que es importante que aprendamos Pattern Matching desde el inicio. A partir de este concepto, podremos notar claras diferencias entre Elixir y otros lenguajes de programación.

Analicemos el siguiente código.

nombre = "José Valim"

Nada raro, estamos asignando el valor de José Valim a la variable nombre ¿cierto?. Aunque esta sería la respuesta en muchos lenguajes de programación, en Elixir este código no se trata de una asignación. En Elixir el signo igual no funciona para asignar valores, más bien, lo podemos ver como una afirmación. ¿Afirmación? Analicemos un poco más de código para que nos quede más en claro.

"José" <> apellido = "José Valim"

Reflexiona un poco, ¿Qué está sucediendo en este línea de código? (ya comentamos que <> nos sirve para concatenar) ¿Fallará la compilación?, ¿Qué valor obtendrá variable apellido?. Toma un poco de tu tiempo y si quieres, coloca tu respuesta en la sección de comentarios.

Bien, en esta línea estamos indicando que todo lo que se encuentra a la izquierda del signo igual, es decir "José" <> apellido es exactamente igual, a lo que se encuentra a su derecha "José Valim" (esta es la afirmación). El valor que obtendrá la variable apellido es Valim.

Elixir hace el match entre ambos valores, los de la derecha y los de la izquierda. Como se afirma que ambos valores deben der ser idénticos, es posible conocer/asignar el valor para apellido.

¿Aún no te quedo claro?, no te preocupes, Joe Armstrong, creador de Erlang nos lo explica de la siguiente manera :

Cuando tu escribes la ecuación x = a + 1, no estás asignando el valor de a + 1 a x. En lugar de ello, tú simplemente estás evaluando que la expresión x y a + 1 tienen el mismo valor, si tú conoces el valor de x puedes calcular el valor de ay viceversa.

El Pattern Matching es un concepto muy poderoso del que sacaremos mucho provecho cuando nos encontremos desarrollando aplicaciones con Elixir.

Funciones

La funciones en Elixir prácticamente son el core de nuestras aplicaciones. Sin funciones, no hay programa.

La funciones son bastante fáciles de definir. Veamos un ejemplo.

def suma(valor1, valor2) do 
 valor1 + valor2
end

En Elixir, todas las funciones retornan un valor. Este valor será el resultado de la última línea de código ejecutada, en este caso la suma de los dos parámetros.

Algo que también notamos, es que no estamos utilizando llaves, estamos limitando el cuerpo de la función mediante las palabras reservas do y end.

En Elixir las funciones son ciudadanos de primera clase (como debería de esperarse de un lenguaje funcional); Esto quiere decir que nosotros podemos asignar funciones a variables, colocarlas como argumento de otras funciones o retornar funciones desde otras funciones (algo que podríamos llamar funception... aunque nadie lo hace, lo acabo de inventar 😅).

Aquí un ejemplo de una función anónima, es decir, una función sin nombre, que eventualmente estará identificada por la variable suma, de nuevo usando el operador de afirmación (=).

suma = fn (valor1, valor2) -> valor1 + valor2 end

Para que nosotros podamos ejecutar una función anónima basta con colocar la variable, punto y los argumentos que necesite, en este caso Si es necesario utilizar paréntesis (pero solo para las funciones anónimas).

#Ejecutamos la función anónima en la variable suma y se imprime el resultado
IO.puts suma.(10, 20)

Regularmente nosotros trabajaremos con módulos los cuales agruparán funciones que tengan relaciones entre sí.

defmodule Calculadora do

  def suma(val1, val2) do
    val1 + val2
  end

end

Esto creará un nombre de espacio para las funciones declaradas dentro del módulo, de modo que para mandar a llamar una de estas funciones, primero colocaremos el módulo al que pertenecen, como puedes ver a continuación:

#Llamamos a la función suma declarada dentro del módulo Calculadora
Calculadora.suma 10, 20

Elixir en la web

Elixir puede utilizarse como lenguaje de desarrollo para aplicaciones con distintos propósitos, entre ellos, el desarrollo en el backend. Si queremos desarrollar páginas web con Elixir podemos hacer uso del framework Phoenix.

Phoenix es lo que Ruby on Rails es a Ruby. Es una analogía muy interesante porque de hecho, si has utilizado Rails, Phoenix te será muy familiar y dominarlo será una cuestión de tiempo.

En el pasado realicé un vídeo para nuestra serie de Bytes en el que nos introducíamos a este framework. Te dejo el vídeo para que le eches un vistazo.

En el vídeo aprendimos a crear una aplicación web con las operaciones CRUD (Crear, Leer, Actualizar y Eliminar de una base de datos), como observamos en el vídeo mismo, hacerlo esto muy fácil con Phoenix.

Recursos

Si quieres aprender más acerca de Elixir te recomiendo dos libros, que a consideración personal, son muy buenos:

Y claro, todos los vídeos de la serie Bytes en los que hemos utilizado Elixir:

De igualmanera te comparto un taller en el que aprenderemos a consumir un API usando Elixir.

Conclusión

Elixir es un lenguaje de programación que se está volviendo extremadamente popular. En la actualidad, cada vez más programadores y empresas utilizan e implementan aplicaciones escritas con Elixir.

La demanda de desarrolladores Elixir crece cada día, y con esto, los salarios.

De la última encuesta realizada por stackoverflow ( Resultados de la encuesta para desarrolladores 2017 ) hay tres puntos que podemos destacar sobre Elixir.

  • Es uno de los lenguajes más queridos (Aparece en el top de dicha categoría)
  • Es un lenguaje que seguirá creciendo (El uso es aún bajo respecto de otros lenguajes.)
  • El salario es muy bueno (Promedio $65,000 USD al año)

En lo personal recomiendo ampliamente aprender Elixir, no solo por dominar un nuevo lenguaje, si no por aprender y dominar otro paradigma de programación, el funcional, mismo que ha probado tener ventajas enormes sobre otras alternativas como la Programación Orientada a Objetos, que quizá valga la pena destacar en otro artículo..

Algo que siempre comento de aprender alguna nueva tecnología, es que al invertir un poco de nuestro tiempo, lo peor que nos puede pasar, es aprender algo nuevo. Si Elixir por alguna razón no te agrada, te puedo asegurar que en el intento, habrás aprendido : mejores prácticas, mejores formas de estructurar tu código o ver los problemas a solucionar desde un ángulo distinto.

Si llegaste a este punto del post, déjame agradecerte por tu tiempo, si el artículo te gusto (o no) siéntete libre de dejar tu opinión en el apartado de comentarios, los leeré todos 🌽🍺.