Agent मॉड्यूल प्रोसेस और रिसीव-सेंड लूप को शुरू करने के लिए एक एब्स्ट्रैक्शन देता है। आगे हम 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 स्ट्रक्चर आपके लिए पहले से दिया गया है।
CommunityGarden.start/1 फंक्शन बनाइए। इसे विकल्पों की एक वैकल्पिक कीवर्ड सूची मिलनी चाहिए, जिसे आगे एजेंट प्रोसेस को भेजा जाएगा। शुरू में गार्डन की स्थिति ऐसी होनी चाहिए जो प्लॉट के खाली संग्रह को दर्शाए। इसे गार्डन की pid के साथ एक :ok टपल लौटाना चाहिए।
{:ok, pid} = CommunityGarden.start()
# => {:ok, #PID<0.112.0>}
CommunityGarden.list_registrations/1 फंक्शन बनाइए। इसे कम्युनिटी गार्डन की pid मिलनी चाहिए। इसे उन संग्रहीत प्लॉट की सूची लौटानी चाहिए जो रजिस्टर हैं।
CommunityGarden.list_registrations(pid)
# => []
अभी हमने प्लॉट रजिस्टर करने की सुविधा नहीं जोड़ी है, इसलिए यह सूची खाली होनी चाहिए
CommunityGarden.register/2 फंक्शन बनाइए। इसे कम्युनिटी गार्डन की pid और प्लॉट रजिस्टर करने के लिए एक नाम मिलना चाहिए। सफल होने पर इसे वह Plot स्ट्रक्चर लौटाना चाहिए जिसमें प्लॉट की id और वह व्यक्ति हो जिसके नाम पर प्लॉट रजिस्टर हुआ है।
id बढ़ते क्रम में और अद्वितीय होनी चाहिए। आप एजेंट की स्थिति में एक id काउंटर रख सकते हैं।
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"}]
CommunityGarden.release/2 फंक्शन बनाइए। इसे उस प्लॉट की pid और id मिलनी चाहिए जिसे खाली करना है। सफल होने पर इसे :ok लौटाना चाहिए। प्लॉट खाली होने पर उसकी id दोबारा इस्तेमाल नहीं होती। वह सिर्फ एक अद्वितीय पहचानकर्ता के तौर पर इस्तेमाल होती है।
CommunityGarden.release(pid, 1)
# => :ok
CommunityGarden.list_registrations(pid)
# => []
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"}
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।