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")
سجّل في Exercism لتتعلّم وتتقن Gleam عبر 33 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.