কিওয়ার্ড লিস্ট হলো এমন একটি ডেটা স্ট্রাকচার, যেখানে কী (key) আর ভ্যালুর জোড়া থাকে।
[month: "April", year: 2018]
কিওয়ার্ড লিস্ট আসলে {key, value} টাপল-এর একটি অ্যারে, আর সেভাবেও লেখা যায়, তবে ছোট সিনট্যাক্সটিই বেশি ব্যবহৃত হয়।
[month: "April"] == [{:month, "April"}]
# => true
কিওয়ার্ড লিস্টের প্রতিটি কী (key) অবশ্যই একটি অ্যাটম হতে হবে, তবে ভ্যালু যেকোনো কিছু হতে পারে। একই কী (key) একাধিকবার ব্যবহার করা যায়। আর কওয়ার্ড লিস্টের কী (key) আর ভ্যালুর জোড়াগুলো একটি নির্দিষ্ট ক্রমে সাজানো থাকে।
আপনি অ্যারে নিয়ে যেভাবে কাজ করেন, সেই একই পদ্ধতিতে কওয়ার্ড লিস্ট নিয়েও কাজ করতে পারেন, আবার Keyword মডিউলটিও ব্যবহার করতে পারেন।
আপনি একটি অভিজাত রেস্তোরাঁর ম্যানেজার, আর সেই রেস্তোরাঁয় আছে বেশ বড় একটি ওয়াইনের ভান্ডার। আপনার অনেক গ্রাহকই ওয়াইনের ব্যাপারে খুব খুঁটিনাটি পছন্দ করেন। নির্দিষ্ট একজন গ্রাহকের জন্য ঠিক সঠিক ওয়াইনের বোতলটি খুঁজে বের করা সহজ কাজ নয়।
টেক-সচেতন রেস্তোরাঁ মালিক হিসেবে আপনি ঠিক করেছেন, গ্রাহকদের পছন্দ অনুযায়ী ওয়াইন ফিল্টার করার একটি অ্যাপ লিখে ওয়াইন বাছাইয়ের কাজটি দ্রুত করবেন।
আপনার অ্যাপের স্বাগত স্ক্রিনে প্রতিটি ওয়াইনের রঙের একটি ছোট ব্যাখ্যা দেখাতে চান।
WineCellar.explain_colors/0 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি কোনো আর্গুমেন্ট নেয় না এবং ওয়াইনের রংগুলোকে কী(key) আর ব্যাখ্যাগুলোকে ভ্যালু হিসেবে নিয়ে একটি কিওয়ার্ড লিস্ট রিটার্ন করে।
| রং | ব্যাখ্যা |
|---|---|
:white |
Fermented without skin contact. |
:red |
Fermented with skin contact using dark-colored grapes. |
:rose |
Fermented with some skin contact, but not enough to qualify as a red wine. |
ওয়াইনের একটি বোতলকে আঙুরের জাত, বছর আর উৎপত্তির দেশ — এই তিনটি এলিমেন্টের একটি ৩-টিউপল হিসেবে প্রকাশ করা হয়। ওয়াইনগুলো ওয়াইনের রং অনুযায়ী একটি কিওয়ার্ড লিস্টে সংরক্ষণ করা হয়।
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
]
WineCellar.filter/3 ফাংশনটি ইমপ্লিমেন্ট করুন। এটি ওয়াইনগুলোর একটি কিওয়ার্ড লিস্ট, একটি রং অ্যাটম এবং অপশনগুলোর একটি কিওয়ার্ড লিস্ট নেবে, যার ডিফল্ট মান []। ফাংশনটি নির্দিষ্ট একটি রঙের ওয়াইনগুলোর একটি লিস্ট রিটার্ন করবে।
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white
)
# => [
# {"Chardonnay", 2015, "Italy"},
# {"Pinot grigio", 2017, "Germany"}
# ]
WineCellar.filter/3 ফাংশনটি বাড়িয়ে লিখুন। একটি :year অপশন দেওয়া হলে ফাংশনটি নির্দিষ্ট একটি রঙের এবং নির্দিষ্ট একটি বছরের ওয়াইনগুলোর একটি লিস্ট রিটার্ন করবে।
আগেই ইমপ্লিমেন্ট করা WineCellar.filter_by_year/2 ফাংশনটি ব্যবহার করুন। এটি আর্গুমেন্ট হিসেবে ওয়াইনগুলোর একটি লিস্ট আর একটি বছর নেয় এবং নির্দিষ্ট একটি বছরের ওয়াইনগুলোর একটি লিস্ট রিটার্ন করে।
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015
)
# => [
# {"Chardonnay", 2015, "Italy"}
# ]
WineCellar.filter/3 ফাংশনটি বাড়িয়ে লিখুন। একটি :country অপশন দেওয়া হলে ফাংশনটি নির্দিষ্ট একটি রঙের এবং নির্দিষ্ট একটি দেশের ওয়াইনগুলোর একটি লিস্ট রিটার্ন করবে।
আগেই ইমপ্লিমেন্ট করা WineCellar.filter_by_country/2 ফাংশনটি ব্যবহার করুন। এটি আর্গুমেন্ট হিসেবে ওয়াইনগুলোর একটি লিস্ট আর একটি দেশ নেয় এবং নির্দিষ্ট একটি দেশের ওয়াইনগুলোর একটি লিস্ট রিটার্ন করে।
খেয়াল রাখবেন, ফাংশনটি যখন একসাথে :year এবং :country — এই দুটি অপশনই, যেকোনো ক্রমে — পায়, তখনও যেন কাজ করে।
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015,
country: "Germany"
)
# => []
Exercism-এ সাইন আপ করুন, Elixir ট্র্যাকের 58টি কনসেপ্ট168টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।