المسارات
/
Gleam
Gleam
/
التمارين
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

تمرين تعلّمي

مقدمة

المصفوفات

المصفوفة في Gleam مجموعة غير قابلة للتغيير تتكوّن من صفر أو أكثر من القيم. يجب أن تكون كل القيم في المصفوفة من النوع نفسه. ولأن المصفوفات غير قابلة للتغيير، فبمجرد إنشاء مصفوفة لا يمكن أن تتغير قيمتها أبدًا. أي دوال أو عوامل تبدو وكأنها تعدّل مصفوفة (مثل إضافة عنصر) ستُرجع في الواقع مصفوفة جديدة.

يمكن تعريف المصفوفات على النحو التالي:

let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]

أكثر الأساليب شيوعًا لإضافة عنصر إلى مصفوفة هي صيغة النشر:

let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]

تحتوي وحدة gleam/list في مكتبة Gleam القياسية على دوال مفيدة كثيرة للتعامل مع المصفوفات. هذه الوحدة شائعة الاستخدام جدًا في كود Gleam، لذا من الجيد أن تكون على دراية بها.

يمكن استخدام أنماط المصفوفات في تعبيرات case لمطابقة المصفوفات وإسناد القيم التي تحتويها إلى متغيرات:

pub fn describe(list: List(String)) -> String {
  case list {
    [] -> "Empty list"
    [x] -> "List with one item: " <> x
    [x, y] -> "List with two items: " <> x <> " and " <> y
    _ -> "List with three or more items"
  }
}

إلى جانب مطابقة المصفوفات ذات الطول المحدد، يمكن استخدام صيغة النشر لمطابقة المصفوفات التي لا يقل طولها عن حد معيّن:

pub fn describe(list: List(String)) -> String {
  case list {
    [_, _, ..] -> "List with at least two items"
    [_] -> "List with one item"
    [] -> "Empty list"
  }
}

يمكن أيضًا استخدام صيغة النشر لإسناد بقية المصفوفة إلى متغير:

pub fn remove_first_item(list: List(String)) -> List(String) {
  case list {
    // Return the list without the first item
    [_, ..rest] -> rest

    // There's no first item to remove, return an empty list
    _ -> []
  }
}

ينبغي أن تحتوي تعبيرات case على نمط لكل قيمة ممكنة من النوع الذي تتم مطابقته، لذا كثيرًا ما يُستخدم نمط التجاهل (_) في النهاية للتعامل مع أي قيم متبقية.

التعليمات

في هذا التمرين ستكتب كودًا لتتبّع مصفوفة من لغات البرمجة التي تريد تعلّمها على Exercism.

لديك ست مهام، وكلها ستتضمّن التعامل مع المصفوفات.

1. إنشاء مصفوفة جديدة

لتتبّع اللغات التي تريد تعلّمها، ستحتاج إلى إنشاء مصفوفة جديدة. عرّف الدالة new_list التي تُرجع مصفوفة جديدة فارغة.

new_list()
// -> []

2. تعريف مصفوفة موجودة

حاليًا، لديك ورقة مكتوب عليها اللغات التي تريد تعلّمها: Gleam وGo وTypeScript. عرّف الدالة existing_list لتُرجع هذه المصفوفة.

existing_list()
// -> ["Gleam", "Go", "TypeScript"]

3. إضافة لغة جديدة إلى مصفوفة

بينما تستكشف Exercism وتجد لغات أكثر إثارة للاهتمام، سترغب في إضافتها إلى مصفوفتك. نفّذ الدالة add_language لإضافة لغة جديدة إلى بداية مصفوفتك.

add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]

4. عدّ اللغات في المصفوفة

عدّ اللغات واحدة تلو الأخرى غير عملي. نفّذ الدالة count_languages لعدّ عدد اللغات في مصفوفتك.

count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4

5. عكس المصفوفة

في مرحلة ما، تدرك أن مصفوفتك مرتّبة بالعكس فعليًا! نفّذ الدالة reverse_list لعكس مصفوفتك.

reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]

6. التحقق مما إذا كانت المصفوفة مثيرة

رغم أنك تحب كل اللغات، فإن لـGleam مكانة خاصة في قلبك. ولهذا، تتحمّس كثيرًا لمصفوفة من اللغات إذا:

  • كانت الأولى في المصفوفة هي Gleam.
  • كان العنصر الثاني في المصفوفة هو Gleam وكانت المصفوفة تحتوي على لغتين أو ثلاث لغات.

نفّذ الدالة exciting_list للتحقق مما إذا كانت مصفوفة اللغات مثيرة:

exciting_list(["Lua", "Gleam"])
// -> True
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Gleam Exercism

مستعد لبدء Tracks on Tracks on Tracks؟

سجّل في Exercism لتتعلّم وتتقن Gleam عبر 33 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.