Gleam-এ কোনো টাইপ অ্যালিয়াস ব্যবহার করে এমন একটি বিদ্যমান টাইপের জন্য সুবিধাজনক নাম দেওয়া যায়, যা অন্যথায় লিখতে ঝামেলার হতো।
pub type Headers =
List(#(String, String))
pub fn html_headers() -> Headers {
[
#("content-type", "text/html"),
#("x-frame-options", "DENY"),
]
}
pub type দিয়ে লেখা হলে অ্যালিয়াসটি যে মডিউলে ডিফাইন করা হয়েছে তার বাইরেও ব্যবহার করা যায়। pub বাদ দিলে অ্যালিয়াসটি প্রাইভেট হয়ে যায় এবং অন্য মডিউল থেকে রেফারেন্স করা যায় না।
Gleam-এ ডিক্ট হলো কী (key) আর মানের জোড়া হিসেবে তথ্য সংরক্ষণ করার ডেটা স্ট্রাকচার। অন্য ভাষায় এগুলোকে অ্যাসোসিয়েটিভ অ্যারে, হ্যাশ বা ডিকশনারি নামেও চেনা যায়।
ডিক্টে কী (key) ও মানের জন্য যেকোনো টাইপ ব্যবহার করা যায়, আর অ্যাক্সেস বা রিটার্ন করার সময় ডিক্ট তার এন্ট্রিগুলোর ক্রম নিশ্চিত করে না।
gleam/dict মডিউলের ফাংশন ব্যবহার করে ডিক্ট তৈরি ও ম্যানিপুলেট করা হয়।
// Create an empty dict
let dict1 = dict.new()
// Create a dict with some values
let dict2 = dict.from_list([
#("name", "Gleam"),
#("colour", "Pink"),
])
// Add a value to a dict
let dict3 = dict.insert(dict2, "website", "https://gleam.run")
// Get a value from a dict
let name = dict.get(dict3, "name")
// -> Ok("Gleam")
এই অনুশীলনীতে আপনি আপনার এলাকার আর্কেড হলে সবচেয়ে জনপ্রিয় গেমটির হাই স্কোরের হিসাব রাখার একটি উপায় তৈরি করছেন।
আপনার ৫টি ফাংশন তৈরি করতে হবে, যার বেশিরভাগই হাই স্কোর ধারণ করা একটি অবজেক্ট নিয়ে কাজ করার সাথে সম্পর্কিত।
এমন একটি ফাংশন create_score_board তৈরি করুন যা একটি ডিক্ট রিটার্ন করে, যেটি হাই স্কোর বোর্ড হিসেবে কাজ করে।
এই অবজেক্টের কী (key) গুলো হবে খেলোয়াড়দের নাম, আর মানগুলো হবে তাদের স্কোর।
পরীক্ষার সুবিধার জন্য, আপনি অবজেক্টটিতে সরাসরি একটি এন্ট্রি রাখতে চান।
এই প্রাথমিক এন্ট্রিতে খেলোয়াড়ের নাম হিসেবে "The Best Ever" এবং স্কোর হিসেবে 1_000_000 থাকা উচিত।
create_score_board()
// returns an object with one initial entry
হাই স্কোর বোর্ডে একজন খেলোয়াড় যোগ করতে add_player ফাংশনটি ডিফাইন করুন।
এটি ৩টি প্যারামিটার নেয়:
ফাংশনটি নতুন খেলোয়াড় ও স্কোরসহ একটি ডিক্ট রিটার্ন করে।
কোনো খেলোয়াড় আর্কেড হলের নিয়ম ভাঙলে তাকে ম্যানুয়ালি হাই স্কোর বোর্ড থেকে সরিয়ে ফেলা হয়।
remove_player ডিফাইন করুন, যেটি ২টি প্যারামিটার নেয়:
এই ফাংশনটি সরিয়ে ফেলা খেলোয়াড়টি ছাড়া ডিক্টটি রিটার্ন করা উচিত।
খেলোয়াড়টি যদি শুরুতেই বোর্ডে না থাকে, তাহলে বোর্ডটির কোনো পরিবর্তন হওয়া উচিত নয়; এটি যেমন আছে তেমনই রিটার্ন করতে হবে।
কোনো খেলোয়াড় আর্কেড হলে আরেকটি গেম শেষ করলে, বোর্ডে থাকা আগের স্কোরের সাথে নির্দিষ্ট পরিমাণ পয়েন্ট যোগ হবে।
update_score বাস্তবায়ন করুন, যেটি ৩টি প্যারামিটার নেয়:
ফাংশনটি আপডেট করা স্কোরসহ একটি ডিক্ট রিটার্ন করা উচিত।
খেলোয়াড়টি যদি শুরুতেই বোর্ডে না থাকে, তাহলে বোর্ডটির কোনো পরিবর্তন হওয়া উচিত নয়; এটি যেমন আছে তেমনই রিটার্ন করতে হবে।
আর্কেড হল সোমবারে আলাদা একটি স্কোর বোর্ড রাখে। দিনের শেষে, ওই বোর্ডের প্রতিটি খেলোয়াড় ১০০টি অতিরিক্ত পয়েন্ট পায়।
apply_monday_bonus ফাংশনটি বাস্তবায়ন করুন, যেটি একটি স্কোর বোর্ড গ্রহণ করে।
ফাংশনটি ওই বোর্ডে তালিকাভুক্ত প্রতিটি খেলোয়াড়ের জন্য যোগ করা বোনাস পয়েন্টসহ একটি ডিক্ট রিটার্ন করে।
Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।