Sigilos

Un sigilo es un símbolo que insertamos junto a una expresión para que Elixir la trate de forma especial. Normalmente se usan para crear listas de átomos o cadenas de caracteres sin escribir tanta comilla o para no tener que escapar las comilas en una string o una charlist, pero Elixir permite extender el lenguaje creando sigilos personalizados, como te cuentan aquí: https://elixir-lang.org/getting-started/sigils.html#custom-sigils.

Los sigilos en Elixir nos ofrecen una forma elegante y práctica de escribir cadenas, listas y otros datos complejos sin necesidad de usar comillas ni caracteres de escape. Esto hace que nuestro código sea más legible y fácil de escribir, especialmente cuando trabajamos con textos que contienen comillas o caracteres especiales.

Para crear una cadena de caracteres con sigilos, utilizamos la tecla tilde seguida de una letra que indica el tipo de sigilo. Por ejemplo, para cadenas usamos ~s. En lugar de envolver la cadena entre comillas, la escribimos entre paréntesis después del sigilo, como en ~s(esto es una cadena). Esto nos permite incluir comillas dentro del texto sin tener que escaparlas, lo que simplifica mucho la escritura de cadenas complejas o largas.

Si queremos evitar que se interpreten las interpolaciones dentro de la cadena, podemos usar la versión con la letra mayúscula, ~S. Así, cualquier secuencia como #{variable} se imprimirá literalmente sin intentar evaluarla. Esto también funciona para charlists, usando ~c y ~C para cadenas de caracteres y charlists respectivamente, con o sin interpolación.

Los sigilos no solo sirven para cadenas, sino que también facilitan la creación de listas de palabras. Por ejemplo, con ~w podemos escribir una lista de cadenas sin necesidad de usar comillas ni corchetes. Si escribimos ~w(hola adiós buenos días), Elixir lo interpreta como ["hola", "adiós", "buenos", "días"]. Además, podemos modificar el tipo de elementos que queremos en la lista añadiendo un sufijo: a para átomos, s para cadenas (por defecto) y c para charlists. Por ejemplo, ~w(hola adiós)a crea una lista de átomos [:hola, :adiós].

Un uso avanzado de los sigilos en Elixir es la creación de fechas y horas de forma sencilla. Usando el sigilo ~D, podemos escribir fechas en formato ISO directamente, como ~D[2021-04-21], y obtener un valor de tipo Date. Esto es mucho más cómodo que construir fechas con el módulo Date manualmente, y nos permite acceder fácilmente a sus componentes como .day, .month y .year.

Aunque Elixir permite crear sigilos personalizados mediante librerías, en la mayoría de los casos con los sigilos estándar cubrimos las necesidades más comunes. Estos recursos nos ayudan a escribir código más limpio y legible, evitando la molestia de escapar caracteres o escribir estructuras complejas de forma verbosa.

# Ejemplo de cadena con sigilo ~s
cadena = ~s(Hola "mundo", ¿cómo estás?)
IO.puts(cadena)
# Salida: Hola "mundo", ¿cómo estás?

# Cadena sin interpolación con ~S
nombre = "Dani"
saludo = ~S(Hola #{nombre}, bienvenido)
IO.puts(saludo)
# Salida: Hola #{nombre}, bienvenido

# Lista de palabras con ~w
lista_cadenas = ~w(hola adiós buenos días)
IO.inspect(lista_cadenas)
# Salida: ["hola", "adiós", "buenos", "días"]

# Lista de átomos con ~w y sufijo a
lista_atomos = ~w(hola adiós buenos días)a
IO.inspect(lista_atomos)
# Salida: [:hola, :adiós, :buenos, :días]

# Fecha con sigilo ~D
fecha = ~D[2021-04-21]
IO.puts("Día: #{fecha.day}, Mes: #{fecha.month}, Año: #{fecha.year}")
# Salida: Día: 21, Mes: 4, Año: 2021
Lista de reproducción
  1. 1
    mix
    10 minutos
  2. 2
    Documentando código: comentarios, docs y moduledocs
    10 minutos
  3. 3
    Atributos de módulo
    9 minutos
  4. 4
    Dependencias
    12 minutos
  5. 5
    Un ejemplo práctico de módulo útil
    13 minutos
  6. 6
    Alias e import
    10 minutos
  7. 7
    Sobre las macros, require y use
    11 minutos
  8. 8
    Typespecs (parte 1, usando tipos básicos)
    10 minutos
  9. 9
    Typespecs (parte 2, tipos propios y t())
    11 minutos
  10. 10
    Comportamientos
    11 minutos
  11. 11
    Tratamiento de errores con rescue
    8 minutos
  12. 12
    Elevando errores con raise
    8 minutos
  13. 13
    with
    14 minutos
  14. 14
    Sigilos
    8 minutos
  15. 15
    Tests con ExUnit
    12 minutos
  16. 16
    Más particularidades de ExUnit
    13 minutos
  17. 17
    Microservicios en Elixir con Plug
    11 minutos
  18. 18
    Cómo Plug.Router te ayuda a escribir microservicios en Elixir
    14 minutos
  19. 19
    ¿Cómo hacer rutas dinámicas en Phoenix y Plug?
    13 minutos