Mapas

Un mapa es una estructura asociativa que permite asociar dos expresiones entre sí formando un sistema clave-valor: toda expresión término (clave) tiene una definición (valor). Como las keyword lists, por otra parte. La diferencia es que los mapas nos dan más juego.

Los mapas en Elixir son una estructura asociativa fundamental que nos permite vincular claves con valores, funcionando de manera similar a un diccionario. A diferencia de las listas de palabras clave, que también asocian claves y valores, los mapas son mucho más versátiles y eficientes, especialmente cuando necesitamos realizar consultas rápidas sobre elementos específicos.

Para definir un mapa, utilizamos el símbolo de porcentaje seguido de llaves. Por ejemplo, un mapa vacío se escribe como %{}. Dentro de estas llaves podemos colocar nuestras asociaciones de clave y valor, separadas por una flecha especial =>. Por ejemplo, si queremos asociar la clave :dia con el valor "Lunes", lo escribimos así:

mapa = %{:dia => "Lunes"}

Esta sintaxis nos permite guardar en la variable mapa un mapa con una única clave :dia que apunta al valor "Lunes".

Una diferencia importante entre mapas y listas de palabras clave es el tipo de claves que aceptan. En las listas de palabras clave, las claves solo pueden ser átomos, mientras que en los mapas podemos usar cualquier tipo de dato como clave. Por ejemplo, podemos tener números o cadenas de texto como claves sin problema:

mapa = %{1 => "Lunes", 2 => "Martes", "tres" => "Miércoles"}

Esto nos da mucha más flexibilidad para modelar datos, ya que no estamos limitados a usar solo átomos como claves.

Para acceder a los valores en un mapa, podemos usar la sintaxis de corchetes con la clave deseada, como mapa[:dia], que nos devolverá "Lunes". Sin embargo, cuando las claves son átomos, Elixir nos ofrece una forma más cómoda de acceder a los valores usando la notación de punto:

mapa.dia

Esta forma es especialmente útil porque, si intentamos acceder a una clave que no existe, Elixir nos lanzará un error, lo que puede ayudarnos a detectar problemas en nuestro código. En cambio, si usamos la sintaxis con corchetes y la clave no existe, simplemente obtendremos nil.

Otra diferencia clave entre mapas y listas de palabras clave es el orden de los elementos. Las listas de palabras clave son listas, por lo que mantienen el orden en que definimos sus elementos. Esto es importante cuando hacemos pattern matching o cuando el orden de los elementos tiene significado. Por ejemplo, si definimos una lista de palabras clave con b: 2, a: 1, el orden se mantiene tal cual.

En cambio, los mapas no mantienen ningún orden. Aunque Elixir puede mostrar las claves en orden alfabético cuando imprimimos un mapa, internamente no hay una noción de primer o último elemento. Esto significa que no podemos confiar en el orden de los elementos en un mapa, ya que es como un saco donde los elementos están mezclados.

Cuando todas las claves de un mapa son átomos, podemos usar una sintaxis más simplificada para definirlo, omitiendo la flecha => y usando dos puntos después de la clave:

mapa = %{dia: "Lunes", mes: "Enero"}

Esta forma es más legible y común en Elixir cuando trabajamos con claves que son átomos.

En resumen, los mapas nos ofrecen una estructura asociativa potente y flexible, con claves de cualquier tipo y acceso eficiente a sus valores. Nos permiten trabajar con datos sin preocuparnos por el orden de los elementos, lo que es ideal para muchas situaciones en programación funcional con Elixir.

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