Concatenar e interpolar strings

La concatenación de cadenas de caracteres permite juntar varias cadenas de caracteres en una. Además, con la interpolación, vamos a poder meter unas cadenas en otras. Por lo demás, aprovecho para hablar más sobre cómo escapar caracteres.

Cuando trabajamos con cadenas de caracteres en Elixir, lo primero que debemos tener claro es cómo comparar strings. El operador más común para esto es el doble igual ==, que nos permite verificar si dos cadenas son iguales. Por ejemplo, la expresión "hola" == "hola" devuelve true, mientras que si las cadenas son diferentes, el resultado será false. También existe el operador triple igual ===, pero en el caso de las cadenas no presenta diferencias significativas con el doble igual, por lo que podemos usar cualquiera de los dos con tranquilidad.

Lo interesante es que estas comparaciones no solo funcionan con literales, sino también con variables o incluso con el resultado de funciones. Por ejemplo, si definimos una variable x = "hola" y luego comparamos x == "hola", obtendremos true. Si usamos funciones como String.upcase("hola"), que convierte la cadena a mayúsculas, la comparación con "hola" devolverá false porque las mayúsculas y minúsculas no coinciden. Pero si invertimos la comparación y comparamos String.upcase("hola") == String.upcase(x), el resultado será true porque ambas cadenas están en mayúsculas.

Pasando a la concatenación, en Elixir unimos cadenas usando el operador <>. Aunque puede parecer extraño para quienes vienen de otros lenguajes, este operador funciona juntando la cadena de la izquierda con la de la derecha. Por ejemplo, "hola" <> "mundo" produce "holamundo". Si queremos un espacio entre las palabras, debemos incluirlo explícitamente, como en "hola " <> "mundo". También podemos encadenar varias concatenaciones, por ejemplo:

"hola" <> " " <> "mundo"

Esto nos da "hola mundo". Además, podemos concatenar variables, como si x = "hola" y nombre = "Dani", entonces:

x <> " " <> nombre

resulta en "hola Dani".

Sin embargo, a veces concatenar con <> puede ser un poco engorroso, especialmente cuando queremos insertar valores dentro de una cadena. Para eso, Elixir ofrece la interpolación, que es una forma más elegante de incluir valores dentro de strings. La interpolación consiste en escribir la cadena normalmente y, en el punto donde queremos insertar un valor, usamos #{expresión}. Por ejemplo:

nombre = "Dani"
"Hola #{nombre}"

Esto produce "Hola Dani". Lo potente de la interpolación es que no solo podemos insertar cadenas, sino cualquier expresión. Por ejemplo, podemos usar funciones dentro de la interpolación:

"Hola #{String.capitalize(nombre)}"

Esto convierte la primera letra de nombre en mayúscula y produce "Hola Dani". También podemos interpolar números o átomos sin problema:

numero = 42
"Hola #{numero}"

da como resultado "Hola 42". Y si interpolamos un átomo, como :mundo, se convierte en la cadena "mundo".

Un detalle importante al trabajar con cadenas es cómo manejar caracteres especiales y escapes. Por ejemplo, si queremos incluir un carácter de comillas dentro de una cadena, o un símbolo como el hashtag #, debemos tener cuidado para que Elixir no lo interprete como parte de la sintaxis de interpolación. Para insertar literalmente un # sin que se interprete como interpolación, debemos escaparlo con una barra invertida \. Por ejemplo:

"Esto es un \\#literal"

Aquí, la doble barra invertida \\ se interpreta como una barra invertida literal, y el # no se toma como inicio de interpolación.

Otro caso común es cuando queremos incluir barras invertidas en las cadenas, como en rutas de Windows. Si escribimos algo como "C:\notepad", Elixir interpretará \n como un salto de línea, lo que no es lo que queremos. Para evitarlo, debemos escapar la barra invertida con otra barra invertida, así:

"C:\\notepad"

De esta forma, la cadena contiene la barra invertida literal. Esto es especialmente útil en sistemas Windows, donde las rutas usan barras invertidas. Aunque Elixir cuenta con funciones que manejan rutas de forma más segura, es bueno saber cómo escapar estos caracteres manualmente.

En resumen, trabajar con cadenas en Elixir implica entender cómo comparar, concatenar e interpolar strings, y también cómo manejar caracteres especiales mediante escapes para evitar errores o interpretaciones no deseadas. Estos conceptos nos permiten manipular texto de forma flexible y segura en nuestros programas.

Lista de reproducción
  1. 1
    ¿Qué es Elixir?
    10 minutos
  2. 2
    Instalación de Elixir
    9 minutos
  3. 3
    ¿Qué es la programación funcional? (Como la de Elixir)
    20 minutos
  4. 4
    ¿Cómo funciona la REPL de Elixir?
    7 minutos
  5. 5
    ¿Cómo hacer asignaciones en Elixir?
    7 minutos
  6. 6
    Operadores aritméticos básicos
    6 minutos
  7. 7
    ¿Qué son los tipos de datos de Elixir?
    5 minutos
  8. 8
    Átomos en Elixir
    4 minutos
  9. 9
    Las palabras clave nil, true y false
    6 minutos
  10. 10
    Operadores lógicos de comparación
    8 minutos
  11. 11
    Comparación estricta con ===
    3 minutos
  12. 12
    Operadores lógicos y proposicionales
    8 minutos
  13. 13
    Invocación de funciones
    10 minutos
  14. 14
    Fundamentos de funciones
    9 minutos
  15. 15
    Cadenas de caracteres
    8 minutos
  16. 16
    Entrada y salida estandar de la mano de gets y puts
    9 minutos
  17. 17
    Concatenar e interpolar strings
    9 minutos
  18. 18
    Código fuente en archivos
    9 minutos
  19. 19
    Condicional IF y bloques DO-END
    11 minutos
  20. 20
    IFs anidados, UNLESS y COND
    12 minutos
  21. 21
    Definición de funciones
    11 minutos
  22. 22
    Fundamentos de compilación de módulos
    6 minutos
  23. 23
    Guardas
    8 minutos
  24. 24
    Funciones anónimas
    7 minutos
  25. 25
    Capturar funciones
    4 minutos
  26. 26
    Invocación de funciones dentro del mismo módulo
    7 minutos
  27. 27
    Tuplas
    8 minutos
  28. 28
    Introducción al pattern matching
    8 minutos
  29. 29
    Pattern matching en funciones
    11 minutos
  30. 30
    Las tuplas :ok, :error
    7 minutos
  31. 31
    case
    10 minutos
  32. 32
    Operador pin
    7 minutos
  33. 33
    Pattern matchings y recursividad
    5 minutos
  34. 34
    Listas
    9 minutos
  35. 35
    Operadores y funciones de lista
    10 minutos
  36. 36
    Keyword lists: listas de palabras clave
    8 minutos
  37. 37
    Mapas
    7 minutos
  38. 38
    Pattern matching de mapas y keyword lists
    6 minutos
  39. 39
    Operadores y funciones para mapas y keyword lists
    5 minutos
  40. 40
    Estructuras con defstruct
    11 minutos
  41. 41
    Bitstrings
    11 minutos
  42. 42
    Charlists
    10 minutos
  43. 43
    Funciones de alto orden en Elixir
    5 minutos
  44. 44
    Uso de la función filter
    10 minutos
  45. 45
    Uso de la función map
    7 minutos
  46. 46
    Uso de la función reduce
    9 minutos
  47. 47
    Pipelines
    11 minutos
  48. 48
    Rangos y Streams
    11 minutos
  49. 49
    Funciones recursivas con listas
    14 minutos