Elixir code বিহেভিয়ার ব্যবহার করে কমন জেনেরিক ইন্টারফেস প্রদান করতে, একই সাথে যে প্রতিটি মডিউল এটি ইমপ্লিমেন্ট করে তার জন্য নির্দিষ্ট ইমপ্লিমেন্টেশন সহজ করে। এরকম একটি কমন উদাহরণ হলো অ্যাক্সেস বিহেভিয়ার।
অ্যাক্সেস বিহেভিয়ার একটি কী (key)-ভিত্তিক ডেটা স্ট্রাকচার থেকে ডেটা আনার জন্য একটি কমন ইন্টারফেস প্রদান করে। অ্যাক্সেস বিহেভিয়ার ম্যাপ ও কিওয়ার্ড লিস্টের জন্য ইমপ্লিমেন্ট করা হয়েছে, তবে এটির ব্যবহার বুঝতে চলুন ম্যাপের ক্ষেত্রে এটি দেখি। অ্যাক্সেস বিহেভিয়ার বলে যে, যখন আপনার একটি ম্যাপ থাকে, তখন আপনি এটির পরে তৃতীয় বন্ধনী দিয়ে, তারপর কী (key) ব্যবহার করে সেই কী (key)-এর সাথে সম্পর্কিত মানটি পেতে পারেন।
# 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"
ডেটা স্ট্রাকচারে যদি কী (key) না থাকে, তাহলে nil রিটার্ন করা হয়। এটি অনিচ্ছাকৃত আচরণের কারণ হতে পারে, কারণ এটি কোনো এরর রেইজ করে না। লক্ষ্য করুন, nil নিজেই অ্যাক্সেস বিহেভিয়ার ইমপ্লিমেন্ট করে এবং যেকোনো কী (key)-এর জন্য সর্বদা nil রিটার্ন করে।
আপনি একটি স্থানীয় বাস্কেটবল দলের ওয়েবসাইট রক্ষণাবেক্ষণের জন্য একটি ওয়েব ডেভেলপমেন্ট টিমের সাথে কাজ করছেন। ওয়েব ডেভেলপমেন্ট টিমটি Elixir-এর সাথে কম পরিচিত এবং দ্রুত ডেভেলপমেন্ট সহজ করতে নেস্টেড ম্যাপের একটি সিরিজ থেকে ডেটা বের করার জন্য একটি ফাংশন চাইছে।
extract_from_path/2 ফাংশনটি ইমপ্লিমেন্ট করুন যাতে এটি দুটি আর্গুমেন্ট নেয়:
data: বাস্কেটবল দল সম্পর্কিত ডেটাসহ একটি নেস্টেড ম্যাপ স্ট্রাকচার।path: পিরিয়ড দিয়ে আলাদা করা কী (key) নিয়ে গঠিত একটি স্ট্রিং, যা শেষ কী (key) থেকে সংশ্লিষ্ট মান বের করতে ব্যবহৃত হয়।যদি path-এর কোনো এক ধাপে মান বা কী (key) বিদ্যমান না থাকে, তাহলে nil রিটার্ন করা উচিত।
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
এই ফাংশনটি ইমপ্লিমেন্ট করার সময় Access Behaviour ব্যবহার করুন।
নেস্টেড ম্যাপ ডেটা স্ট্রাকচার নিয়ে কাজ করার জন্য Map বা Kernel মডিউলের কোনো ফাংশন ব্যবহার করবেন না।
আপনার কোড রিভিউ করা সহকর্মী আপনার ইমপ্লিমেন্টেশনের সাথে প্রায় একই রকম কাজ করে এমন একটি Kernel মডিউল ফাংশনের কথা জানান।
এই Kernel মডিউল ফাংশনটি ব্যবহার করতে get_in_path/2 ইমপ্লিমেন্ট করুন।
প্রত্যাশিত আর্গুমেন্টগুলো অংশ ১-এর মতোই।
BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।