Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Közösségi kert
Közösségi kert

Közösségi kert

Tanulófeladat

Bevezetés

Agent

Az Agent modul absztrakciót nyújt folyamatok és a receive-send ciklus létrehozásához. A továbbiakban az Agent modullal indított folyamatokat agentfolyamatoknak fogjuk nevezni. Egy agentfolyamat lehet az a választás, amely egy központilag megosztott állapotot képvisel.

Egy agentfolyamat indításához az Agent a start/2 függvényt kínálja. Az agentfolyamat start-tal való indításakor a megadott függvény adja vissza a folyamat kezdeti állapotát:

# Start an agent process with an initial value of an empty list
{:ok, agent_pid} = Agent.start(fn -> [] end)

Ahogy a Map vagy a List, úgy az Agent is számos függvényt kínál az agentfolyamatokkal való munkához.

Az Agent-tel kapcsolatos összes funkcionalitást célszerű egy modulba szervezni és egységbe zárni a modellezett terület számára.

Utasítások

A közösségi egyesületed arra kért meg, hogy készíts egy egyszerű nyilvántartó alkalmazást a közösségi kert regisztrációinak kezeléséhez. A Plot structot már megkaptad.

1. Nyisd meg a kertet

Valósítsd meg a CommunityGarden.start/1 függvényt. Ez egy opcionális kulcsszólistát fogad, amelyet továbbad az agentfolyamatnak. A kert kezdőállapotát üres parcellagyűjteményként kell inicializálni. Egy :ok tuple-t adjon vissza a kert pid-jével.

{:ok, pid} = CommunityGarden.start()
# => {:ok, #PID<0.112.0>}

2. Listázd a regisztrációkat

Valósítsd meg a CommunityGarden.list_registrations/1 függvényt. Ez a közösségi kert pid-jét kapja meg. A tárolt, regisztrált parcellák listáját adja vissza.

CommunityGarden.list_registrations(pid)
# => []

Ezen a ponton még nem adtuk hozzá a parcella regisztrálásának lehetőségét, így ennek a listának üresnek kell lennie

3. Regisztrálj parcellákat egy személyhez

Valósítsd meg a CommunityGarden.register/2 függvényt. Ez a közösségi kert pid-jét és egy nevet kap, amihez a parcellát regisztrálja. Sikeres futás esetén a Plot structot adja vissza a parcella azonosítójával és a hozzá regisztrált személlyel.

Az azonosítók növekvőek és egyediek legyenek. Az azonosítók számlálóját az agentfolyamat állapotában tarthatod.

CommunityGarden.register(pid, "Emma Balan")
# => %Plot{plot_id: 1, registered_to: "Emma Balan"}
CommunityGarden.list_registrations(pid)
# => [%Plot{plot_id: 1, registered_to: "Emma Balan"}]

4. Szabadítsd fel a parcellákat

Valósítsd meg a CommunityGarden.release/2 függvényt. Ez a felszabadítandó parcella pid-jét és id-jét kapja meg. Siker esetén :ok-ot ad vissza. Amikor egy parcellát felszabadítasz, az azonosító nem kerül újra felhasználásra; csak egyedi azonosítóként szolgál.

CommunityGarden.release(pid, 1)
# => :ok
CommunityGarden.list_registrations(pid)
# => []

5. Kérj le egy regisztrált parcellát

Valósítsd meg a CommunityGarden.get_registration/2 függvényt. Ez a vizsgálandó parcella pid-jét és id-jét kapja meg. Ha a parcella regisztrált, adja vissza a parcellát; ha nincs regisztrálva, :not_found-ot ad vissza.

CommunityGarden.get_registration(pid, 1)
# => %Plot{plot_id: 1, registered_to: "Emma Balan"}
CommunityGarden.get_registration(pid, 7)
# => {:not_found, "plot is unregistered"}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Közösségi kert 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.