En elixir tenemos Mapas:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
También tenemos listas de palabras clave:
> kl = [a: "one", b: "two"] # = [a: "one", b: "two"]
> kl2 = [{:a, "one"},{:b, "two"}] # = [a: "one", b: "two"]
> kl == kl2 # = true
> kl[:a] # = "one"
> kl.a # = ** (ArgumentError)
¿Por qué ambos?
¿Sintaxis? ¿Es porque las listas de palabras clave tienen una sintaxis más flexible que les permite ser definidas sin curlys e incluso sin corchetes como último parámetro de una llamada de función? Entonces, ¿por qué no darle a Maps este azúcar sintáctico?
¿Claves duplicadas? ¿Es porque las listas de palabras clave pueden tener claves duplicadas? ¿Por qué querría tanto acceso al estilo de mapa como claves duplicadas?
¿Actuación? ¿Es porque las listas de palabras clave tienen un mejor rendimiento? Entonces, ¿por qué tener Maps? ¿Y no deberían los mapas ser más eficaces para buscar miembros por clave que una lista de tuplas?
¿JS Array y Ruby Hash como apariencia? ¿Es asi?
Entiendo que estructuralmente son diferentes representaciones de datos. A mí me parece que las listas de palabras clave en elixir sirven para complicar el lenguaje a través de una sintaxis excepcional (3 variantes sintácticas diferentes), superposición de casos de uso con mapas y un beneficio poco claro.
¿Cuál es el beneficio de utilizar listas de palabras clave?
El principal beneficio de las listas de palabras clave es la compatibilidad con versiones anteriores de la base de código elixir y erlang existente.
También agregan azúcar de sintaxis si se usan como argumentos de funciones que se asemejan, por ejemplo, a una sintaxis ruby:
El principal inconveniente de utilizar listas de palabras clave es que no es posible realizar una coincidencia parcial de patrones en ellas:
Extengámoslo a los argumentos de la función. Imagine que necesitamos manejar una función de múltiples cláusulas en función del valor de una de las opciones:
Esto nunca ejecutará
do_special_thing
:Con argumentos de mapa funcionará:
fuente
Los mapas permiten solo una entrada para una clave en particular, mientras que las listas de palabras clave permiten que se repita la clave. Los mapas son eficientes (especialmente a medida que crecen) y se pueden usar en la coincidencia de patrones de Elixir.
En general, use listas de palabras clave para cosas como parámetros de línea de comandos y para pasar opciones, y use mapas (u otra estructura de datos, el HashDict) cuando desee una matriz asociativa.
fuente