در Gleam میتوان از اسم مستعار نوع استفاده کرد تا برای یک نوع موجود که در غیر این صورت نوشتنش دشوار است، اسمی مناسب در نظر گرفت.
pub type Headers =
List(#(String, String))
pub fn html_headers() -> Headers {
[
#("content-type", "text/html"),
#("x-frame-options", "DENY"),
]
}
وقتی با pub type نوشته شود، این اسم مستعار بیرون از ماژولی که در آن تعریف شده هم قابل استفاده است. اگر pub حذف شود، اسم مستعار خصوصی میشود و نمیتوان در ماژولهای دیگر به آن ارجاع داد.
دیکشنریها در Gleam ساختار دادهای برای ذخیرهی اطلاعات در قالب جفتهای کلید-مقدار هستند. در زبانهای دیگر، این ساختار ممکن است با اسم آرایههای انجمنی، هش یا دیکشنری هم شناخته شود.
برای کلیدها و مقدارهای یک دیکشنری میتوان از هر نوعی استفاده کرد. دیکشنریها هم ترتیب درایههایشان را هنگام دسترسی یا بازگرداندن تضمین نمیکنند.
دیکشنریها با استفاده از توابع ماژول 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 بسازید که یک «دیکت» برمیگرداند و به عنوان تابلوی امتیازهای برتر به کار میرود.
کلیدهای این شیء اسم بازیکنان و مقدارهایش امتیاز آنها خواهند بود.
برای اهداف آزمایشی، میخواهید یک ورودی را مستقیماً در شیء بگنجانید.
این ورودی اولیه باید از "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 را پیادهسازی کنید که یک تابلوی امتیاز میپذیرد.
تابع دیکتی برمیگرداند که امتیازهای پاداش برای هر بازیکن فهرستشده روی آن تابلو به آن اضافه شده است.