Introducción a Elixir
Conoce el lenguaje funcional que está revolucionando el desarrollo de software concurrente.
¿Qué es Elixir?
Elixir es un lenguaje de programación funcional, concurrente y de propósito general. Fue creado por José Valim en 2011 y se ejecuta sobre la máquina virtual de Erlang (BEAM), heredando décadas de experiencia en sistemas distribuidos y tolerantes a fallos.
Elixir combina la productividad de lenguajes modernos como Ruby con el poder de la plataforma Erlang, usada por empresas como WhatsApp, Discord y Pinterest para manejar millones de conexiones concurrentes.
Características principales
- Funcional: Los datos son inmutables y las funciones son ciudadanos de primera clase
- Concurrente: Millones de procesos ligeros pueden ejecutarse simultáneamente
- Tolerante a fallos: El sistema "let it crash" permite que los errores se manejen de forma elegante
- Escalable: Diseñado para sistemas distribuidos desde el principio
- Productivo: Sintaxis clara y herramientas modernas
Instalación
La forma más sencilla de instalar Elixir depende de tu sistema operativo:
macOS (con Homebrew)
brew install elixir
Ubuntu/Debian
# Agregar repositorio de Erlang Solutions
wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb
sudo dpkg -i erlang-solutions_2.0_all.deb
sudo apt-get update
# Instalar Elixir
sudo apt-get install esl-erlang elixir
Windows
Descarga el instalador desde elixir-lang.org o usa Chocolatey:
choco install elixir
Verificar la instalación
elixir --version
# Elixir 1.15.0 (compiled with Erlang/OTP 26)
IEx: El shell interactivo
IEx (Interactive Elixir) es tu herramienta principal para experimentar con el lenguaje. Inícialo escribiendo iex en tu terminal:
$ iex
Erlang/OTP 26 [erts-14.0] ...
Interactive Elixir (1.15.0) - press Ctrl+C to exit
iex(1)> 1 + 1
2
iex(2)> "Hola" <> " Mundo"
"Hola Mundo"
iex(3)> IO.puts("¡Bienvenido a Elixir!")
¡Bienvenido a Elixir!
:ok
En IEx puedes usar h/1 para obtener ayuda sobre cualquier función. Por ejemplo: h IO.puts
Comandos útiles de IEx
| Comando | Descripción |
|---|---|
h/1 | Muestra documentación de una función |
i/1 | Muestra información sobre un valor |
c/1 | Compila un archivo .ex |
r/1 | Recompila un módulo |
v/1 | Recupera un valor anterior por número de línea |
Tu primer programa
Crea un archivo llamado hola.exs:
# hola.exs
IO.puts("¡Hola desde Elixir!")
nombre = "Mundo"
IO.puts("¡Hola, #{nombre}!")
Ejecútalo con:
elixir hola.exs
# ¡Hola desde Elixir!
# ¡Hola, Mundo!
.ex son archivos para compilar. .exs son scripts que se ejecutan directamente. Usa .exs para scripts y pruebas, .ex para código de producción.
Operadores básicos
Aritméticos
iex> 10 + 5 # Suma: 15
iex> 10 - 5 # Resta: 5
iex> 10 * 5 # Multiplicación: 50
iex> 10 / 5 # División (siempre float): 2.0
iex> div(10, 3) # División entera: 3
iex> rem(10, 3) # Resto: 1
Comparación
iex> 1 == 1 # Igual: true
iex> 1 != 2 # Diferente: true
iex> 1 < 2 # Menor que: true
iex> 1 <= 2 # Menor o igual: true
iex> 1 === 1.0 # Estrictamente igual: false
iex> 1 == 1.0 # Igual (permite conversión): true
Lógicos
iex> true and true # true
iex> true or false # true
iex> not true # false
# Versiones que aceptan cualquier valor (no solo booleanos)
iex> 1 || 2 # 1 (primer valor "truthy")
iex> nil || 2 # 2
iex> 1 && 2 # 2 (último valor si todos son "truthy")
iex> nil && 2 # nil
En Elixir, solo nil y false son considerados "falsy". Todo lo demás (incluyendo 0 y "") es "truthy".
La filosofía de Elixir
Antes de continuar, es importante entender algunos principios fundamentales:
Inmutabilidad
En Elixir, los datos nunca cambian. Cuando "modificas" algo, en realidad creas una copia con los cambios:
iex> lista = [1, 2, 3]
[1, 2, 3]
iex> nueva_lista = [0 | lista]
[0, 1, 2, 3]
iex> lista # La original no cambió
[1, 2, 3]
Funciones puras
Las funciones ideales no tienen efectos secundarios: dado el mismo input, siempre producen el mismo output.
"Let it crash"
En lugar de programación defensiva excesiva, Elixir favorece dejar que los procesos fallen y que los supervisores los reinicien. Esto lleva a código más limpio y sistemas más robustos.
Abre IEx y experimenta:
- Calcula el área de un círculo con radio 5 (usa
3.14159 * 5 * 5) - Concatena tu nombre y apellido usando
<> - Usa
h String.upcasepara ver la documentación - Prueba
String.upcase("hola")
Crea un script saludo.exs que:
- Defina variables para nombre y edad
- Imprima un saludo personalizado usando interpolación de strings
- Calcule y muestre el año de nacimiento aproximado