Track
/
Elixir
Elixir
/
Esercizi
/
Sito web di basket
Sito web di basket

Sito web di basket

Esercizio di apprendimento

Introduzione

Access Behaviour

Elixir usa i Behaviour per fornire interfacce generiche comuni, facilitando al contempo implementazioni specifiche per ogni modulo che li implementa. Un esempio comune di questo è l'Access Behaviour.

L'Access Behaviour fornisce un'interfaccia comune per recuperare dati da una struttura dati basata su chiavi. L'Access Behaviour è implementato per le mappe e le liste di parole chiave, ma vediamo come si usa con le mappe per capirne meglio il funzionamento. L'Access Behaviour stabilisce che, quando hai una mappa, puoi farla seguire da una coppia di parentesi quadre e poi usare la chiave per recuperare il valore associato a quella chiave.

# 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"

Se la chiave non esiste nella struttura dati, viene restituito nil. Questo può portare a comportamenti indesiderati, perché non viene sollevato alcun errore. Nota che nil stesso implementa l'Access Behaviour e restituisce sempre nil per qualsiasi chiave.

Istruzioni

Lavori con un team di sviluppo web per mantenere un sito web per una squadra di basket locale. Il team di sviluppo web ha meno familiarità con Elixir e chiede una funzione per estrarre dati da una serie di mappe annidate, per facilitare lo sviluppo rapido.

1. Estrai i dati da una struttura di mappe annidate

Implementa la funzione extract_from_path/2 in modo che accetti due argomenti:

  • data: una struttura di mappe annidate con i dati sulla squadra di basket.
  • path: una stringa composta da chiavi delimitate da punti per ottenere il valore associato all'ultima chiave.

Se il valore o la chiave non esiste in qualsiasi punto del percorso, va restituito 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 l'Access Behaviour quando implementi questa funzione.

Non usare nessuna funzione dei moduli Map o Kernel per lavorare con la struttura di mappe annidate.

2. Riorganizza usando le funzioni incluse

Un collega che revisiona il codice ti parla di una funzione del modulo Kernel che fa qualcosa di molto simile a quella appena implementata.

Implementa get_in_path/2 per usare questa funzione del modulo Kernel.

Gli argomenti attesi sono gli stessi della parte 1.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elixir Exercism

Vuoi iniziare Sito web di basket?

Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.