ট্র্যাক
/
Elixir
Elixir
/
অনুশীলনী
/
বাস্কেটবল ওয়েবসাইট
বাস্কেটবল ওয়েবসাইট

বাস্কেটবল ওয়েবসাইট

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

ভূমিকা

অ্যাক্সেস বিহেভিয়ার

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-এর সাথে কম পরিচিত এবং দ্রুত ডেভেলপমেন্ট সহজ করতে নেস্টেড ম্যাপের একটি সিরিজ থেকে ডেটা বের করার জন্য একটি ফাংশন চাইছে।

1. একটি নেস্টেড ম্যাপ স্ট্রাকচার থেকে ডেটা বের করুন

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 মডিউলের কোনো ফাংশন ব্যবহার করবেন না।

2. অন্তর্ভুক্ত ফাংশন ব্যবহার করে রিফ্যাক্টর করুন

আপনার কোড রিভিউ করা সহকর্মী আপনার ইমপ্লিমেন্টেশনের সাথে প্রায় একই রকম কাজ করে এমন একটি Kernel মডিউল ফাংশনের কথা জানান।

এই Kernel মডিউল ফাংশনটি ব্যবহার করতে get_in_path/2 ইমপ্লিমেন্ট করুন।

প্রত্যাশিত আর্গুমেন্টগুলো অংশ ১-এর মতোই।

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Elixir Exercism

বাস্কেটবল ওয়েবসাইট শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।