Tracks
/
Elixir
Elixir
/
Übungen
/
Basketball-Website
Basketball-Website

Basketball-Website

Lernübung

Einführung

Access Behaviour

Elixir verwendet Behaviours, um allgemeine, generische Schnittstellen bereitzustellen und gleichzeitig spezifische Implementierungen für jedes Modul zu ermöglichen, das sie implementiert. Ein bekanntes Beispiel dafür ist das Access Behaviour.

Das Access Behaviour stellt eine gemeinsame Schnittstelle bereit, um Daten aus einer schlüsselbasierten Datenstruktur abzurufen. Das Access Behaviour ist für Maps und Keyword-Listen implementiert, aber schauen wir uns seine Verwendung für Maps an, um ein Gefühl dafür zu bekommen. Das Access Behaviour legt fest, dass du bei einer Map direkt dahinter eckige Klammern setzen und dann mit dem Schlüssel den zugehörigen Wert abrufen kannst.

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

Wenn der Schlüssel in der Datenstruktur nicht existiert, wird nil zurückgegeben. Das kann zu unbeabsichtigtem Verhalten führen, weil dabei kein Fehler ausgelöst wird. Beachte, dass nil selbst das Access Behaviour implementiert und für jeden Schlüssel immer nil zurückgibt.

Anleitung

Du arbeitest mit einem Webentwicklungsteam zusammen, um eine Website für ein lokales Basketballteam zu pflegen. Das Webentwicklungsteam ist mit Elixir weniger vertraut und bittet um eine Funktion, mit der sich Daten aus einer Reihe verschachtelter Maps extrahieren lassen, um die schnelle Entwicklung zu erleichtern.

1. Daten aus einer verschachtelten Map-Struktur extrahieren

Implementiere die Funktion extract_from_path/2, die zwei Argumente entgegennimmt:

  • data: eine verschachtelte Map-Struktur mit Daten über das Basketballteam.
  • path: ein String, der aus durch Punkte getrennten Schlüsseln besteht, um den Wert zu erhalten, der dem letzten Schlüssel zugeordnet ist.

Wenn der Wert oder der Schlüssel an irgendeiner Stelle im Pfad nicht existiert, gib nil zurück

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

Verwende das Access Behaviour, wenn du diese Funktion implementierst.

Verwende keine Funktionen des Map- oder Kernel-Moduls, um mit der verschachtelten Map-Datenstruktur zu arbeiten.

2. Mit eingebauten Funktionen refaktorieren

Dein Kollege, der deinen Code überprüft, erzählt dir von einer Funktion des Kernel-Moduls, die etwas sehr Ähnliches macht wie deine Implementierung.

Implementiere get_in_path/2 so, dass sie diese Funktion des Kernel-Moduls verwendet.

Die erwarteten Argumente sind dieselben wie in Teil 1.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Basketball-Website zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.