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