José Valim decidió crear un lenguaje para aumentar la productividad en la plataforma Erlang y lo consiguió. El nombre de este lenguaje es Elixir.
Elixir es lenguaje de programación de propósito general, concurrente; este lenguaje es funcional. Además esta construido sobre la máquina virtual de Erlang. Se trata de un lenguaje dinámico con una sintaxis flexible y apoyado en macros; que aprovecha las capacidades de Erlang para construir aplicaciones concurrentes y distribuidas, tolerables a fallos, con actualizaciones de código en caliente.
Elixir también soporta pattern matching, el polimorfismo a través de protocolos (similar a Clojure), alias y estructuras de datos asociativos (generalmente conocido como hashes en otros lenguajes de programación).
Por útimo, Elixir y Erlang comparten el mismo byte code. Esto significa que puede invocar código Erlang de Elixir (y viceversa) sin ningún tipo de transformación o impacto en el rendimiento. Esto permite a los desarrolladores mezclar la expresividad de Elixir con la robustez y el rendimiento de Erlang.
Veamos un ejemplo, es bueno comenzar con un "hola mundo" pero para hacerlo más interesante vamos a hacerlo dentro de un modulo:
1 2 3 4 5 6 7 8 9 10 11 | defmodule Hello do IO.puts "Defining the function world" def world do IO.puts "Hello World" end IO.puts "Function world defined" end Hello.world |
Los módulos son simplemente una forma lógica de organizar el código, no se debe confundir con una clase, ya que no tiene propiedades.
Este código retorna:
1 2 3 | Defining the function world Function world define Hello World |
Si queremos probar el ejemplo solo debemos guardar el ejemplo como Hello.ex y luego debemos compilar, para eso ejecutamos el relp de Elixir y compilamos de la siguiente manera:
1 2 3 4 5 6 7 8 | Interactive Elixir iex> c( "Hello.ex" ) [Hello] iex> Hello.hello Defining the function world Function world define Hello World :ok |
Elixir tiene varias características que lo hacen un muy buen lenguaje para programar, como por ejemplo tiene pattern matching, veamos un ejemplo:
1 2 3 4 5 6 7 8 9 10 | def serve_drinks({ User, name, age }) when age < 21 do raise "No way #{name}!" end def serve_drinks({ User, name, age }) do # Code that serves drinks! end serve_drinks User.get( "John" ) #=> Raises "No way John!" if John is under 21 |
Otra característica interesante es que la documentación es muy importante para elixir. Por lo que provee mecanismos que facilitan documentar nuestro código, veamos un ejemplo:
1 2 3 4 5 6 7 8 9 10 | defmodule MyModule do @moduledoc "" " Documentation for my module. With **formatting**. " "" @doc "Hello" def world do "World" end end |
Y como es de esperar, Elixir provee herramientas que facilitan el acceso a la documentación.
1 2 3 4 | iex> h MyModule # MyModule Documentation for my module. With **formatting**. |
Elixir es un lenguaje que nació para facilitar el desarrollo en la plataforma Erlang y vaya que lo logro!
Más información | Elixir