المسارات
/
Elixir
Elixir
/
التمارين
/
الحاجة إلى السرعة
الحاجة إلى السرعة

الحاجة إلى السرعة

تمرين تعلّمي

مقدمة

الاسم المستعار

لمشاركة الكود بين وحدات Elixir مختلفة داخل المشروع نفسه، تحتاج إلى الإشارة إلى الوحدة الخارجية باسمها الكامل. لكن ماذا لو كان هذا الاسم طويلًا جدًا أو مربكًا؟

تتيح لك الصيغة الخاصة alias تقصير الاسم الذي تشير به إلى وحدة خارجية أو تغييره. وعند استخدامها بدون أي وسائط، فإنها تختصر اسم الوحدة إلى مقطعه الأخير، على سبيل المثال يتحول MyApp.Logger.Settings إلى Settings. ويمكن تحديد اسم مخصص عبر الخيار :as.

عادةً تُضاف الأسماء المستعارة في بداية تعريف الوحدة.

defmodule Square do
  alias Integer, as: I

  def area(a), do: I.pow(a, 2)
end

الاستيراد

تتيح لك الصيغة الخاصة import استخدام دوال من وحدة خارجية دون كتابة اسم الوحدة.

قد يؤدي استيراد وحدة خارجية بالكامل إلى تعارضات مع الدوال المحلية الموجودة. ولتجنب ذلك، يتوفر خياران: :except و:only. وكلاهما يتوقع قائمة كلمات مفتاحية، يكون فيها المفتاح اسم الدالة والقيمة عدد معاملاتها.

عادةً تُضاف الاستيرادات في بداية تعريف الوحدة.

defmodule Square do
  import Integer, only: [pow: 2]

  def area(a), do: pow(a, 2)
end

التعليمات

تلك السيارة التي تعمل بالتحكم عن بُعد والتي اشتريتها مؤخرًا قد تحوّلت إلى هواية جديدة بالكامل. لقد كنت تنظّم سباقات لسيارات التحكم عن بُعد.

كنت قد أوشكت على الانتهاء من كتابة برنامج يسمح بتشغيل محاكاة السباقات، حين قفز قطك على لوحة المفاتيح وحذف بضعة أسطر من الكود. والآن لم يعد برنامجك يُترجم...

1. أصلح خطأ الترجمة Race.__struct__/0 is undefined

أضف اسمًا مستعارًا حتى يمكن الإشارة إلى الوحدة NeedForSpeed.Race بالاسم الأقصر Race.

2. أصلح خطأ الترجمة Car.__struct__/0 is undefined

أضف اسمًا مستعارًا حتى يمكن الإشارة إلى الوحدة NeedForSpeed.RemoteControlCar بالاسم الأقصر Car.

3. أصلح خطأ الترجمة undefined function puts/1

الدالة puts/1 تأتي من الوحدة IO. استوردها حتى تتمكن من استخدامها دون الإشارة إلى الوحدة.

4. أصلح خطأ الترجمة undefined function default_color/0

الدوال default_color/0 وred/0 وcyan/0 وgreen/0 كلها تأتي من الوحدة IO.ANSI. وأنت تخطط لإضافة دعم لألوان سيارات أخرى، لذلك تريد استيراد الوحدة كاملة. للأسف، تتعارض الدالة color/1 من الوحدة IO.ANSI مع إحدى دوالك المحلية. استورد الوحدة IO.ANSI كاملة باستثناء تلك الدالة.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء الحاجة إلى السرعة؟

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