المسارات
/
Elixir
Elixir
/
التمارين
/
موقع كرة السلة
موقع كرة السلة

موقع كرة السلة

تمرين تعلّمي

مقدمة

Access Behaviour

يستخدم 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 بشكل كبير، وهو يطلب دالة تستطيع استخراج البيانات من سلسلة من الخرائط المتداخلة لتسهيل التطوير السريع.

1. استخراج البيانات من بنية خرائط متداخلة

نفّذ الدالة 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 للتعامل مع بنية الخرائط المتداخلة.

2. إعادة الهيكلة باستخدام الدوال المضمّنة

يخبرك زميلك الذي يراجع كودك عن دالة في وحدة Kernel تفعل شيئًا مشابهًا جدًا لتنفيذك.

نفّذ get_in_path/2 لتستخدم دالة وحدة Kernel هذه.

الوسائط المتوقعة هي نفسها كما في الجزء 1.

BasketballWebsite.get_in_path(data, "team_mascot.actor.first_name")
# => "Noel"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء موقع كرة السلة؟

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