المسارات
/
Elixir
Elixir
/
التمارين
/
حديقة المجتمع
حديقة المجتمع

حديقة المجتمع

تمرين تعلّمي

مقدمة

Agent

توفر وحدة Agent تجريدًا لإنشاء العمليات وحلقة receive-send. من هنا، سنسمي العمليات التي تُبدأ باستخدام وحدة Agent 'عمليات الوكيل'. قد تُختار عملية وكيل لتمثيل حالة مشتركة مركزية.

لبدء عملية وكيل، توفر وحدة Agent الدالة start/2. الدالة التي تمررها عند استدعاء start لبدء عملية الوكيل تُرجع الحالة الأولية للعملية:

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

تمامًا مثل Map أو List، توفر وحدة Agent دوالًا كثيرة للتعامل مع عمليات الوكيل.

من المعتاد تنظيم كل الوظائف المتعلقة بـ Agent وتغليفها في وحدة للمجال الذي يجري نمذجته.

التعليمات

طلبت منك جمعية حيّك تنفيذ تطبيق سجل بسيط لإدارة تسجيلات حديقة المجتمع. وقد تم تزويدك ببنية Plot مسبقًا.

1. افتح الحديقة

نفّذ الدالة CommunityGarden.start/1، ويجب أن تستقبل قائمة اختيارية من الخيارات على شكل كلمات مفتاحية لتُمرَّر إلى عملية الوكيل. ويجب تهيئة الحالة الأولية للحديقة بحيث تمثّل مجموعة فارغة من قطع الأرض. ويجب أن تُرجع صفًا :ok يحمل pid الحديقة.

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

2. اسرد التسجيلات

نفّذ الدالة CommunityGarden.list_registrations/1. يجب أن تستقبل pid الخاص بحديقة المجتمع. ويجب أن تُرجع قائمة بقطع الأرض المخزّنة المسجّلة.

CommunityGarden.list_registrations(pid)
# => []

في هذه المرحلة، لم نضف بعد إمكانية تسجيل قطعة أرض، لذا يجب أن تكون هذه القائمة فارغة

3. سجّل قطع الأرض لشخص

نفّذ الدالة CommunityGarden.register/2. يجب أن تستقبل pid الخاص بحديقة المجتمع واسمًا لتسجيل قطعة الأرض باسمه. وعند نجاح العملية، يجب أن تُرجع بنية Plot مع معرّف قطعة الأرض والشخص المسجّلة باسمه.

يجب أن تكون المعرّفات متزايدة وفريدة. يمكنك الاحتفاظ بعدّاد للمعرّفات في حالة الوكيل.

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. حرّر قطع الأرض

نفّذ الدالة CommunityGarden.release/2. يجب أن تستقبل pid وid الخاصين بقطعة الأرض المطلوب تحريرها. ويجب أن تُرجع :ok عند النجاح. عند تحرير قطعة أرض، لا يُعاد استخدام المعرّف، بل يُستخدم كمعرّف فريد فقط.

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

5. احصل على قطعة أرض مسجّلة

نفّذ الدالة CommunityGarden.get_registration/2. يجب أن تستقبل pid وid الخاصين بقطعة الأرض المطلوب التحقق منها. ويجب أن تُرجع قطعة الأرض إذا كانت مسجّلة، و:not_found إذا كانت غير مسجّلة.

CommunityGarden.get_registration(pid, 1)
# => %Plot{plot_id: 1, registered_to: "Emma Balan"}
CommunityGarden.get_registration(pid, 7)
# => {:not_found, "plot is unregistered"}
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء حديقة المجتمع؟

سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.