المسارات
/
Elixir
Elixir
/
التمارين
/
مستوى السجل
مستوى السجل

مستوى السجل

تمرين تعلّمي

مقدمة

الذرات

يمثّل النوع atom في Elixir قيمة ثابتة. وقيمة الذرة ليست سوى اسمها نفسه. وهذا يمنحنا أسلوبًا آمنًا من ناحية الأنواع للتعامل مع البيانات. ويمكن تعريف الذرات على النحو التالي:

# All atoms are preceded with a ':' then follow with alphanumeric snake-cased characters
variable = :an_atom

الذرات تُمثَّل داخليًا بعدد صحيح في جدول بحث تُضبط قيمه تلقائيًا. ولا يمكن تغيير هذه القيمة الداخلية.

Cond

كثيرًا ما نرغب في كتابة كود يتفرّع بناءً على شرط. ومع أن هناك أساليب كثيرة لفعل ذلك في Elixir، فإن أحد أبسط الأساليب هو استخدام cond/1.

في أبسط صوره، يتبع cond أول مسار يُقيَّم إلى true، مع فرع واحد أو أكثر:

cond do
  x > 10 -> :this_might_be_the_way
  y < 7 -> :or_that_might_be_the_way
  true -> :this_is_the_default_way
end

وإذا لم يُقيَّم أي مسار إلى true، أطلقت بيئة التشغيل خطأً.

التعليمات

أنت تُدير نظامًا يتكوّن من بضعة تطبيقات تنتج الكثير من السجلات. وتريد كتابة برنامج صغير يجمّع هذه السجلات ويمنحها تسميات وفقًا لمستوى خطورتها. تستخدم جميع التطبيقات في نظامك رموز السجل نفسها، لكن بعض التطبيقات القديمة لا تدعم كل الرموز.

رمز السجل تسمية السجل مدعوم في التطبيقات القديمة؟
0 trace لا
1 debug نعم
2 info نعم
3 warning نعم
4 error نعم
5 fatal لا
آخر / غير مدعوم unknown -

1. تحديد تسمية السجل

نفّذ الدالة LogLevel.to_label/2. ينبغي أن تأخذ رمزًا من نوع عدد صحيح وقيمة منطقية تخبرك ما إذا كان السجل قادمًا من تطبيق قديم، وأن تُرجع تسمية سطر السجل كذرة.

يجب أن تُرجع رموز السجل غير المذكورة في الجدول تسمية unknown. كذلك يجب أن تُرجع رموز السجل المذكورة في الجدول على أنها غير مدعومة في التطبيقات القديمة تسمية unknown إذا كان السجل قادمًا من تطبيق قديم.

LogLevel.to_label(0, false)
# => :trace

LogLevel.to_label(0, true)
# => :unknown

2. إرسال تنبيه

لا بد من إخطار أحدهم عند حدوث أمور غير متوقعة.

نفّذ الدالة LogLevel.alert_recipient/2 لتحديد الجهة التي يجب إرسال التنبيه إليها. ينبغي أن تأخذ الدالة رمزًا من نوع عدد صحيح وقيمة منطقية تخبرك ما إذا كان السجل قادمًا من تطبيق قديم، وأن تُرجع اسم المستلم كذرة.

استخدم الدالة LogLevel.to_label/2 من المهمة السابقة. إذا كانت تسمية السجل error أو fatal، فأرسل التنبيه إلى فريق ops. وإذا تلقيت سجلًا بتسمية unknown من نظام قديم، فأرسل التنبيه إلى فريق dev1، أما تسميات unknown الأخرى فيجب إرسال التنبيهات الخاصة بها إلى فريق dev2. ويمكن تجاهل جميع تسميات السجل الأخرى بأمان بإرجاع false.

LogLevel.alert_recipient(-1, true)
# => :dev1

LogLevel.alert_recipient(0, false)
# => false
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء مستوى السجل؟

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