النوع Bool هو أحد لبنات بناء اللغة.
وهو يهدف إلى وصف ما إذا كان شيء ما صحيحًا أم خطأ، بالقيمتين True وFalse على الترتيب.
يمكن دمج القيم المنطقية باستخدام عاملي "و" && و"أو" ||، ونفيها باستخدام الدالة not.
تكون القيم المنطقية مفيدة جدًا أيضًا لإنشاء تفرعات في الكود لا تُنفَّذ إلا إذا تحققت شروط معينة.
في Elm، يتم ذلك باستخدام تعبير if-then-else، كما يلي.
if someCondition || (someOtherCondition && anotherCondition) then
doSomething
else
doSomethingElse
في هذا التمرين، ستُنفّذ منطق المهمة في لعبة تقمّص أدوار جديدة يطوّرها صديق لك. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة لديها كلب أليف شرس ووفيّ. ولسوء الحظ، تقع الكارثة، إذ اختُطف صديقها المفضل أثناء بحثه عن التوت في الغابة. وستحاول أنالين العثور على صديقها المفضل وتحريره، وقد تأخذ كلبها معها في هذه المهمة.
بعد أن قضت بعض الوقت في تتبّع أثر صديقها المفضل، تجد المخيّم الذي يحتجز فيه صديقها. ويتّضح أن هناك خاطفَين: فارس جبّار ورامٍ ماكر.
بعد أن وجدت الخاطفَين، تفكّر أنالين في أي من الإجراءات التالية يمكنها القيام بها:
لديك خمس مهام: تنفيذ المنطق الذي يحدّد ما إذا كانت الإجراءات المذكورة أعلاه متاحة بناءً على حالة الشخصيات الثلاث الموجودة في الغابة وما إذا كان كلب أنالين الأليف حاضرًا أم لا.
نفّذ الدالة canFastAttack التي تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا. تُرجع هذه الدالة True إذا كان يمكن شنّ هجوم سريع بناءً على حالة الفارس. وإلا، فتُرجع False:
knightIsAwake = True
canFastAttack knightIsAwake
--> False
نفّذ الدالة canSpy التي تأخذ ثلاث قيم منطقية، تشير إلى ما إذا كان الفارس والرامي والأسير، على الترتيب، مستيقظين. تُرجع الدالة True إذا كان يمكن التجسّس على المجموعة، بناءً على حالة الشخصيات الثلاث. وإلا، فتُرجع False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
canSpy knightIsAwake archerIsAwake prisonerIsAwake
--> True
نفّذ الدالة canSignalPrisoner التي تأخذ قيمتين منطقيتين، تشير إلى ما إذا كان الرامي والأسير، على الترتيب، مستيقظين. تُرجع الدالة True إذا كان يمكن إرسال إشارة إلى الأسير، بناءً على حالة الشخصيتين. وإلا، فتُرجع False:
archerIsAwake = False
prisonerIsAwake = True
canSignalPrisoner archerIsAwake prisonerIsAwake
--> True
نفّذ الدالة canFreePrisoner التي تأخذ أربع قيم منطقية. تشير المعاملات الثلاثة الأولى إلى ما إذا كان الفارس والرامي والأسير، على الترتيب، مستيقظين. ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف حاضرًا. تُرجع الدالة True إذا كان يمكن تحرير الأسير بناءً على حالة الشخصيات الثلاث ووجود كلب أنالين الأليف. وإلا، فتُرجع False:
knightIsAwake = False
archerIsAwake = True
prisonerIsAwake = False
petDogIsPresent = False
canFreePrisoner knightIsAwake archerIsAwake prisonerIsAwake petDogIsPresent
--> False
نفّذ الدالة stealthAttackDamage التي تأخذ قيمة منطقية تشير إلى ما إذا كان قد اكتُشف أمر أنالين. تُرجع هذه الدالة 7 إذا كان قد اكتُشف أمرها، و12 خلاف ذلك.
annalynIsDetected = True
stealthAttackDamage annalynIsDetected
--> 7
سجّل في Exercism لتتعلّم وتتقن Elm عبر 28 مفهومًا110 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.