Rutas
/
Elixir
Elixir
/
Ejercicios
/
Sitio web de baloncesto
Sitio web de baloncesto

Sitio web de baloncesto

Ejercicio de aprendizaje

Introducción

El comportamiento Access

Elixir utiliza los Behaviours para proporcionar interfaces genéricas comunes y, a la vez, facilitar implementaciones específicas para cada módulo que los implementa. Un ejemplo común de esto es el Access Behaviour.

El Access Behaviour proporciona una interfaz común para obtener datos de una estructura de datos basada en claves. El Access Behaviour está implementado para mapas y listas de palabras clave, pero veamos cómo se usa con los mapas para hacernos una idea. El Access Behaviour especifica que, cuando tienes un mapa, puedes escribir a continuación unos corchetes y usar la clave para obtener el valor asociado a esa clave.

# Suppose we have these two maps defined (note the difference in the key type)
my_map = %{key: "my value"}
your_map = %{"key" => "your value"}

# Obtain the value using the Access Behaviour
my_map[:key] == "my value"
your_map[:key] == nil
your_map["key"] == "your value"

Si la clave no existe en la estructura de datos, se devuelve nil. Esto puede dar lugar a un comportamiento no deseado, ya que no lanza un error. Ten en cuenta que nil también implementa el Access Behaviour y siempre devuelve nil para cualquier clave.

Instrucciones

Trabajas con un equipo de desarrollo web para mantener el sitio web de un equipo de baloncesto local. El equipo de desarrollo web no está muy familiarizado con Elixir y te pide una función que permita extraer datos de una serie de mapas anidados para facilitar un desarrollo rápido.

1. Extrae datos de una estructura de mapas anidados

Implementa la función extract_from_path/2 para que reciba dos argumentos:

  • data: una estructura de mapas anidados con datos sobre el equipo de baloncesto.
  • path: un string formado por claves delimitadas por puntos para obtener el valor asociado a la última clave.

Si el valor o la clave no existe en algún punto de la ruta, se debe devolver nil

data = %{
  "team_mascot" => %{
    "animal" => "bear",
    "actor" => %{
      "first_name" => "Noel"
    }
  }
}

BasketballWebsite.extract_from_path(data, "team_mascot.animal")
# => "bear"
BasketballWebsite.extract_from_path(data, "team_mascot.colors")
# => nil

Usa el Access Behaviour al implementar esta función.

No uses ninguna función de los módulos Map o Kernel para trabajar con la estructura de mapas anidados.

2. Refactoriza usando funciones incluidas

Tu compañero de trabajo, que revisa tu código, te habla de una función del módulo Kernel que hace algo muy similar a tu implementación.

Implementa get_in_path/2 para usar esta función del módulo Kernel.

Los argumentos esperados son los mismos que en la parte 1.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elixir Exercism

¿Listo para empezar Sitio web de baloncesto?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.