المسارات
/
Elixir
Elixir
/
التمارين
/
لعبة التخمين
لعبة التخمين

لعبة التخمين

تمرين تعلّمي

مقدمة

الدوال متعددة الفروع

يتيح Elixir ممارسات مبدأ الفتح والإغلاق من خلال السماح للدوال بامتلاك عدة فروع، فبدلًا من منطق تحكّم مبعثر ومثبَّت في الكود، يمكن كتابة دوال موجّهة لإضافة السلوك أو إزالته بسهولة.

يقدّم Elixir فروع الدوال المتعددة و_الحُرّاس_ لكتابة:

def number(n) when n == 7 do
  "Awesome, that's my favorite"
end

def number(_n) do
  "That's not my favorite"
end

أثناء التنفيذ، سيختبر Elixir، من أعلى ملف المصدر إلى أسفله، أي فرع من فروع الدالة سيستدعيه.

المتغيرات غير المستخدمة ينبغي أن تُسبق بشرطة سفلية.

الحُرّاس

تُستخدم الحُرّاس لمنع Elixir من استدعاء الدوال بناءً على تقييم الوسائط بواسطة دوال الحُرّاس. تبدأ الحُرّاس بالكلمة المفتاحية when، تليها تعبير منطقي. دوال الحُرّاس هي دوال خاصة:

  • يجب أن تكون نقية وألّا تعدّل أي حالة عامة.
  • يجب أن تُرجع قيمتي true أو false الصارمتين.

يمكن العثور على قائمة بالحُرّاس الشائعة في توثيق Elixir. وهي تشمل فحوص الأنواع، والحساب الأساسي، والمقارنات، وعوامل منطقية صارمة.

الوسائط الافتراضية

يمكن للدوال أن تُعلن قيمًا افتراضية لواحد أو أكثر من الوسائط. لنلقِ نظرة على هذه الدالة:

def number(n \\ 13), do: "That's not my favorite"

عند الترجمة، يُنشئ Elixir تعريفًا للدالة number/0 (بدون وسائط)، وnumber/1 (وسيط واحد).

إذا كان لأكثر من وسيط قيمة افتراضية، فستُطبَّق القيم الافتراضية على الدالة من اليسار إلى اليمين لسدّ محل الوسائط الناقصة.

إذا كانت للدالة أكثر من فرع واحد، فينبغي تعريف الوسائط الافتراضية في ترويسة الدالة (دالة بدون جسم) قبل فروع الدالة:

def number(n \\ 13)
def number(n) when n < 10, do: "Dream bigger!"
def number(n) when n > 100, do: "Not that big..."

التعليمات

أنت تنشئ لعبة إلكترونية بسيطة يمكن لصديق أن يخمّن فيها عددًا سريًا. تريد تقديم بعض الملاحظات، لكن دون أن تكشف الإجابة عبر التخمين. عليك تصميم دالة تقدّم ردودًا مختلفة بناءً على علاقة التخمين بالعدد السري.

الشرط الرد
عندما يطابق التخمين العدد السري "Correct"
عندما يكون التخمين أكبر من العدد السري بواحد أو أصغر منه بواحد "So close"
عندما يكون التخمين أكبر من العدد السري "Too high"
عندما يكون التخمين أصغر من العدد السري "Too low"
عندما لا يُقدَّم أي تخمين "Make a guess"

جميع التخمينات والأعداد السرية أعداد صحيحة.

1. اجعل الرد عندما يطابق التخمين العدد السري

نفّذ الدالة compare/2 التي تأخذ وسيطين، secret_number و guess، وكلاهما أعداد صحيحة.

GuessingGame.compare(5, 5)
# => "Correct"

2. اجعل الرد عندما يكون التخمين أكبر من العدد السري

عدّل الدالة compare لتستجيب للتخمينات التي تكون أكبر من العدد السري.

GuessingGame.compare(5, 8)
# => "Too high"

3. اجعل الرد عندما يكون التخمين أصغر من العدد السري

عدّل الدالة compare لتستجيب للتخمينات التي تكون أصغر من العدد السري.

GuessingGame.compare(5, 2)
# => "Too low"

4. اجعل الردود عندما يكون التخمين أكبر من العدد السري بواحد أو أصغر منه بواحد

عدّل الدالة compare لتستجيب للتخمينات القريبة من العدد السري.

GuessingGame.compare(5, 6)
# => "So close"
GuessingGame.compare(5, 4)
# => "So close"

5. اجعل الرد عندما لا يوجد تخمين

عدّل الدالة compare لتستجيب لغياب التخمين.

GuessingGame.compare(5)
# => "Make a guess"

GuessingGame.compare(5, :no_guess)
# => "Make a guess"
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء لعبة التخمين؟

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