المصفوفة في 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.
لديك ست مهام، وكلها ستتضمّن التعامل مع المصفوفات.
لتتبّع اللغات التي تريد تعلّمها، ستحتاج إلى إنشاء مصفوفة جديدة. عرّف الدالة new_list التي تُرجع مصفوفة جديدة فارغة.
new_list()
// -> []
حاليًا، لديك ورقة مكتوب عليها اللغات التي تريد تعلّمها: Gleam وGo وTypeScript. عرّف الدالة existing_list لتُرجع هذه المصفوفة.
existing_list()
// -> ["Gleam", "Go", "TypeScript"]
بينما تستكشف Exercism وتجد لغات أكثر إثارة للاهتمام، سترغب في إضافتها إلى مصفوفتك. نفّذ الدالة add_language لإضافة لغة جديدة إلى بداية مصفوفتك.
add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]
عدّ اللغات واحدة تلو الأخرى غير عملي. نفّذ الدالة count_languages لعدّ عدد اللغات في مصفوفتك.
count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4
في مرحلة ما، تدرك أن مصفوفتك مرتّبة بالعكس فعليًا! نفّذ الدالة reverse_list لعكس مصفوفتك.
reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]
رغم أنك تحب كل اللغات، فإن لـGleam مكانة خاصة في قلبك. ولهذا، تتحمّس كثيرًا لمصفوفة من اللغات إذا:
نفّذ الدالة exciting_list للتحقق مما إذا كانت مصفوفة اللغات مثيرة:
exciting_list(["Lua", "Gleam"])
// -> True
سجّل في Exercism لتتعلّم وتتقن Gleam عبر 33 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.