Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Kosárlabda-weboldal
Kosárlabda-weboldal

Kosárlabda-weboldal

Tanulófeladat

Bevezetés

Access Behaviour

Az Elixir a kódban viselkedéseket használ, hogy közös, általános interfészeket biztosítson, és közben minden őt megvalósító modul számára lehetővé tegye a saját, egyedi megvalósítást. Egy ilyen gyakori példa az Access Behaviour.

Az Access Behaviour közös interfészt biztosít ahhoz, hogy adatokat kérjünk le egy kulcsalapú adatszerkezetből. Ez mapekhez és kulcsszólistákhoz is implementálva van, de nézzük meg a mapeknél való használatát, hogy ráérezzünk. Az Access Behaviour előírja, hogy ha van egy mapünk, akkor utána írhatunk szögletes zárójelet, majd a kulccsal kikereshetjük a hozzá tartozó értéket.

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

Ha a kulcs nem szerepel az adatszerkezetben, akkor az eredmény nil lesz. Ez könnyen nem várt eredményhez vezethet, mert ilyenkor nem dob hibát. Figyeld meg, hogy a nil maga is implementálja az Access Behaviour-t, és bármely kulcsra mindig nil-t ad vissza.

Utasítások

Egy webfejlesztő csapattal dolgozol együtt egy helyi kosárlabdacsapat weboldalának karbantartásán. A webfejlesztő csapat kevésbé ismeri az Elixirt, és egy függvényt kérnek, amellyel adatokat nyerhetnek ki egymásba ágyazott map adatszerkezetek sorozatából, hogy felgyorsítsák a fejlesztést.

1. Adatok kinyerése egymásba ágyazott map adatszerkezetből

Valósítsd meg az extract_from_path/2 függvényt, amely két argumentumot vár:

  • data: egy egymásba ágyazott map adatszerkezet, amely a kosárlabdacsapat adatait tartalmazza.
  • path: pontokkal elválasztott kulcsokból álló string, amellyel az utolsó kulcshoz tartozó értéket kapod meg.

Ha az érték vagy a kulcs az útvonal bármely pontján nem létezik, nil-t kell visszaadni.

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

Használd az Access Behaviour-t, amikor ezt a függvényt megvalósítod.

Ne használd a Map vagy a Kernel modul egyetlen függvényét sem az egymásba ágyazott map adatszerkezet kezeléséhez.

2. Refaktorálás beépített függvényekkel

A kollégád, aki átnézi a kódodat, elmondja, hogy a Kernel modulnak van egy függvénye, amely nagyon hasonló ahhoz, amit te megvalósítottál.

Valósítsd meg a get_in_path/2 függvényt úgy, hogy ezt a Kernel modulfüggvényt használja.

A várt argumentumok ugyanazok, mint az 1. részben.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Kosárlabda-weboldal feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.