let
وقتی در Gleam روی یک مقدار «تطبیق الگو» انجام میدهیم، باید مطمئن شویم که الگوها با همهی مقادیر ممکن آن نوع مطابقت میکنند، وگرنه کد کامپایل نمیشود.
این تابع باید رد شود، چون حالتی را که لیست خالی است مدیریت نکرده است:
pub fn get_first_element_or_crash(items: List(e)) -> e {
case items {
[item, ..] -> item
}
}
بیشتر اوقات در برنامههای Gleam میخواهیم همهی حالتهای ممکن را مدیریت کنیم، اما در بعضی برنامهها، مثل نمونههای اولیه و اسکریپتهای سریع، ممکن است بخواهیم فقط روی «مسیر بدون خطا» تمرکز کنیم و برای بقیهی حالتها کد ننویسیم. اینجاست که let assert در Gleam به کار میآید.
با ادعاهای let، یک الگو میتواند فقط با بعضی از مقادیر ممکن یک نوع مطابقت کند و اگر الگو با مقداری مطابقت نکند، برنامه کرش میکند. با استفاده از let assert میتوانیم تابع بالا را اینطور بنویسیم:
pub fn get_first_element_or_crash(items: List(e)) -> e {
let assert [item, ..] = items
item
}
کتابخانههای Gleam هرگز نباید از ادعاهای let استفاده کنند، چون میتوانند برنامه را کرش کنند. در عوض، باید از نوع Result استفاده کنند و بگذارند توسعهدهندهی برنامه تصمیم بگیرد که خطاها را چطور مدیریت کند.
میکا، برگزارکنندهی رویدادها، در محل کارش ترفیع گرفته است و بهعنوان بخشی از مسئولیتهای جدیدش، مسئول پایگاهدادهی رویدادها شده است. او خیلی زود متوجه شد که بسیاری از دادهها به شکلهایی ذخیره شدهاند که کار کردن با آنها دشوار است، بنابراین شما با هم دست به کار شدهاید تا با یک اسکریپت یکبارمصرف آنها را مرتب کنید.
چون این اسکریپت فقط یک بار اجرا میشود و شما به ساختار دادهها اطمینان دارید، به نظرتان اینجا جای مناسبی برای استفاده از let assertions زبان Gleam است.
هر رویداد گذشته فهرستی از مشکلاتی دارد که در طول رویداد رخ دادهاند. این مشکلات بهصورت نتیجه ذخیره شدهاند، اما همیشه از گونهی Error هستند.
تابع extract_error را پیادهسازی کنید که نتیجهای میگیرد که انتظار میرود همیشه Error باشد و مقدار خطای درون آن را برمیگرداند.
extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"
به ابتدای اسم تیمها واژهی "Team " اضافه شده است، اما نیازی به آن نیست. تابع remove_team_prefix را پیادهسازی کنید تا این پیشوند را از اسم تیم حذف کند.
remove_team_prefix("Team Turtle")
// -> "Turtle"
هر رویداد توسط یک تیم برگزار میشود و هر تیم به یک منطقه تعلق دارد. در پایگاهداده، این دو در یک رشتهی واحد ذخیره شدهاند که با کاما از هم جدا شدهاند.
تابع split_region_and_team را پیادهسازی کنید تا رشته را به یک تاپل از دو رشته تقسیم کند؛ یکی برای منطقه و یکی برای تیم. پیشوند "Team " باید از اسم تیم حذف شود.
split_region_and_team("East,Team Orange")
// -> #("East", "Orange")