يستخدم Elixir ما يُعرف بـ Behaviours في الكود لتوفير واجهات عامة مشتركة، مع تسهيل تطبيقات محددة لكل وحدة تنفّذ هذا السلوك. ومن الأمثلة الشائعة على ذلك Access Behaviour.
يوفر Access Behaviour واجهة مشتركة لاسترجاع البيانات من بنية بيانات تعتمد على المفاتيح. وهو مُنفَّذ للخرائط وقوائم الكلمات المفتاحية، لكن لنلقِ نظرة على استخدامه مع الخرائط لنكوّن فكرة عنه. يحدد Access Behaviour أنه عندما تكون لديك خريطة، يمكنك أن تتبعها بـ الأقواس المربعة ثم تستخدم المفتاح لاسترجاع القيمة المرتبطة به.
# Suppose we have these two maps defined (note the difference in the key type)
my_map = %{key: "my value"}
your_map = %{"key" => "your value"}
# Obtain the value using the Access Behaviour
my_map[:key] == "my value"
your_map[:key] == nil
your_map["key"] == "your value"
إذا لم يكن المفتاح موجودًا في بنية البيانات، فسيكون الناتج nil. وقد يكون هذا مصدرًا لسلوك غير مقصود، لأنه لا يرفع خطأً. لاحظ أن nil نفسه ينفّذ Access Behaviour ويُرجع دائمًا nil لأي مفتاح.
أنت تعمل مع فريق تطوير ويب لصيانة موقع إلكتروني لفريق كرة سلة محلي. فريق تطوير الويب ليس ملمًّا بـ Elixir بشكل كبير، وهو يطلب دالة تستطيع استخراج البيانات من سلسلة من الخرائط المتداخلة لتسهيل التطوير السريع.
نفّذ الدالة extract_from_path/2 بحيث تأخذ وسيطين:
data: بنية خرائط متداخلة تحتوي على بيانات عن فريق كرة السلة.path: سلسلة نصية تتكوّن من مفاتيح مفصولة بنقاط للحصول على القيمة المرتبطة بالمفتاح الأخير.إذا لم توجد القيمة أو المفتاح في أي نقطة على المسار، فيجب إرجاع nil
data = %{
"team_mascot" => %{
"animal" => "bear",
"actor" => %{
"first_name" => "Noel"
}
}
}
BasketballWebsite.extract_from_path(data, "team_mascot.animal")
# => "bear"
BasketballWebsite.extract_from_path(data, "team_mascot.colors")
# => nil
استخدم Access Behaviour عند تنفيذ هذه الدالة.
لا تستخدم أي دوال من وحدتي Map أو Kernel للتعامل مع بنية الخرائط المتداخلة.
يخبرك زميلك الذي يراجع كودك عن دالة في وحدة Kernel تفعل شيئًا مشابهًا جدًا لتنفيذك.
نفّذ get_in_path/2 لتستخدم دالة وحدة Kernel هذه.
الوسائط المتوقعة هي نفسها كما في الجزء 1.
BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.