ট্র্যাক
/
Elixir
Elixir
/
অনুশীলনী
/
কমিউনিটি গার্ডেন
কমিউনিটি গার্ডেন

কমিউনিটি গার্ডেন

লার্নিং অনুশীলনী

ভূমিকা

Agent

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 স্ট্রাক্টটি ইতিমধ্যেই আপনার জন্য সরবরাহ করা হয়েছে।

1. বাগান খুলুন

CommunityGarden.start/1 ফাংশনটি ইমপ্লিমেন্ট করুন, এটি ঐচ্ছিক কিওয়ার্ড লিস্ট হিসেবে অপশন গ্রহণ করবে যা এজেন্ট প্রসেসে পাঠানো হবে। বাগানের প্রাথমিক স্টেটটি খালি প্লট সংগ্রহের প্রতিনিধিত্ব করার জন্য ইনিশিয়ালাইজ করা উচিত। এটি বাগানের pid সহ একটি :ok টাপল রিটার্ন করবে।

{: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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।