Operadores y funciones para mapas y keyword lists

Veamos qué operadores tenemos a nuestra disposición para trabajar con keyword lists. Con mapas es un poco más complicado porque no nos vale el operador ++, pero tenemos el módulo Map para hacer todo este tipo de cosas.

Cuando trabajamos con Keyword Lists y Mapas, es fundamental entender cómo manipularlos de manera eficiente usando operadores y funciones específicas. Empecemos por las Keyword Lists, que en esencia son listas de tuplas. Por esta razón, podemos utilizar el operador de suma ++ para concatenarlas, lo que resulta muy intuitivo. Al sumar dos Keyword Lists, obtenemos una nueva lista que contiene todas las claves y valores de ambas, simplemente concatenadas.

Sin embargo, esta misma operación no es aplicable a los mapas. No podemos usar un operador para sumar dos mapas, pero contamos con una función muy útil llamada Map.merge/2. Esta función recibe dos mapas y devuelve un nuevo mapa que combina las claves y valores de ambos. En caso de que una clave exista en ambos mapas, prevalece el valor del mapa que se pasa como segundo argumento, es decir, el que está a la derecha. Por ejemplo, si en el primer mapa la clave :a tiene el valor 1 y en el segundo mapa la clave :a tiene el valor 3, el resultado de la fusión tendrá :a con valor 3. Esto es muy útil para realizar actualizaciones o combinaciones de mapas sin perder información.

Para modificar mapas, existen varias funciones que nos permiten actualizar o eliminar claves. La función Map.put/3 es la forma más sencilla de insertar o actualizar una clave con un nuevo valor. Por ejemplo, si tenemos un mapa y queremos añadir la clave :c con valor 3, simplemente usamos Map.put(mapa, :c, 3), lo que nos devuelve un nuevo mapa con esa clave añadida o actualizada, sin modificar el mapa original.

Para obtener valores, podemos usar Map.get/3, que nos permite acceder al valor de una clave, y para eliminar claves, Map.delete/2 nos devuelve una copia del mapa sin la clave especificada. Estas funciones son fundamentales para trabajar con mapas de manera funcional, respetando la inmutabilidad.

Además, existe una sintaxis especial para actualizar parcialmente mapas usando el operador de barra vertical |. Este operador nos permite crear una copia de un mapa existente, modificando solo algunas claves específicas. Por ejemplo, si tenemos un mapa con claves como :nombre, :país y :comida, podemos hacer algo así:

persona = %{nombre: "Dani", país: "España", comida: "croquetas"}
persona_actualizada = %{persona | nombre: "Luis"}

Esto devuelve un nuevo mapa donde solo se ha cambiado el valor de :nombre a "Luis", manteniendo el resto igual. Es importante destacar que esta sintaxis solo funciona para actualizar claves que ya existen en el mapa; no podemos usarla para añadir nuevas claves. Si intentamos añadir una clave nueva con esta sintaxis, obtendremos un error.

Por otro lado, para eliminar claves no existe una sintaxis abreviada similar; la forma correcta es usar Map.delete/2. Por ejemplo, para eliminar la clave :nombre de un mapa, hacemos:

persona_sin_nombre = Map.delete(persona, :nombre)

Esto nos devuelve un mapa sin la clave :nombre, pero sin modificar el mapa original.

Finalmente, si queremos explorar más funciones relacionadas con mapas, el módulo Map ofrece varias opciones interesantes, como Map.has_key?/2, que nos permite verificar si un mapa contiene una clave determinada, devolviendo true o false. Esto puede ser útil para condicionales o validaciones antes de acceder a valores.

En resumen, manejar Keyword Lists y Mapas requiere conocer bien las funciones y operadores disponibles para concatenar, fusionar, actualizar y eliminar elementos, siempre respetando la inmutabilidad y aprovechando las herramientas que el lenguaje nos ofrece para trabajar de forma clara y eficiente.

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