notifications Notificaciones

Marcar todas como leídas

Ver más

lightbulb_outline

2122 veces ha sido leído este artículo

Elixir el lenguaje de programación

Lo lees en 7 Min.

Quizás hayas oído hablar acerca de Elixir, y aun no te quede claro de que se trata, ¿quizás una librería? ¿Algún framework? etc ... En 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 se ejecutan en la máquina virtual de Erlang (BEAM).

Elixir es un lenguaje compilado, el código se compila a bytecode de Erlang (otro lenguaje de programación), a modo que este código bytecode se ejecuta en la máquina virtual de Erlang. Además, es posible utilizar funcionalidades de Erlang cuando programamos en Elixir, algo que 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.

El código de Elixir se escribe usando el paradigma de programación funcional, por lo que es probable que tengas que dejar en la puerta el conocimiento de programación orientada a objetos que tienes de otros lenguajes, todo ese conocimiento no aplica a Elixir porque usa un paradigma de programación distinto, en Elixir no hay objetos, ni herencia, ni polimorfismo, en cambio, en Elixir trabajamos principalmente con funciones y módulos.

Es probable que si nunca antes has programado de forma funcional, tus primeros programan te provoquen algunas dolores de cabeza o el código que escribes te parezca ilegible, no te preocupes por eso, la programación funcional tiene enormes beneficios y con suficiente práctica, tu cerebro se acomodará a las ideas de este paradigma.

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 de un Hola Mundo 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, tal como en el ejemplo anterior.

Una vez que escribiste tu primer Hola Mundo en Elixir, 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, 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, es un concepto bastante importante y poderoso, involucrado incluso en la declaración de variables, por eso es importante que aprendamos Pattern Matching desde el inicio. A partir de este concepto, podrás 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 esa 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 porque la variable apellido no ha sido declarada? ¿Qué valor crees que tendrá la variable apellido?. Toma un poco de tu tiempo y si quieres colocar 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). Es por eso que el valor que obtendrá la variable apellido es Valim, Elixir hace el match entre ambos valores a los lados de la afirmación, y 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 desarrollemos 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 retornar un valor, el valor, será el resultado de la expresión en 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 luego imprimos 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

Una vez que vimos un poco de código de Elixir, quiero aclarar que este lenguaje no está limitado a aplicaciones que se ejecutarán en nuestro sistema sin interacción de usuarios. Elixir puede utilizarse como lenguaje de desarrollo para aplicaciones con distintos propósitos, entre ellos, el desarrollo en el backend.

Phoenix es un framework web que nos permite crear páginas web con Elixir. Phoenix es lo que Ruby on Rails es a Ruby. Es una analogía muy interesante porque de hecho, si has utilizado Rails antes, 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 Phoenix, puedes verlo en el vídeo de a continuación:

En este vídeo creamos una aplicación web con las operaciones CRUD (Crear, Leer, Actualizar y Eliminar de una base de datos), como podrás ver en el vídeo mismo, hacerlo es 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:

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 en sus plataformas o servicios aplicaciones escritas con Elixir.

La demanda de desarrolladores Elixir crece cada día, y con esta demanda, 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, dejame 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.

Recomendaciones

Tmate Comparte tu Terminal al Instante

Lo lees en 4 Min.

Una de las herramientas imprescindibles para los desarrolladores es la Terminal, con ella tenemos...

 

Cómo escribir mejores sentencias SQL.

Lo lees en 5 Min.

Si te encuentras comenzando en este mundo de la programación es innegable que en algún momento ...

 

Qué es la metaprogramacion

Lo lees en 6 Min.

La metaprogramación o metaprogramming como decimos en inglés, es uno de los términos más desafian...

 

Desarrolladores Frontend que debes seguir en Twitter

Lo lees en 3 Min.

Las personas desde que empezamos a crecer, manifestamos cierta tendencia imitativa, la cual ...