تُمثَّل القيم المنطقية في Cairo بالنوع المنطقي المعرَّف مسبقًا bool، الذي يمكن أن تأخذ قيمه إما true أو false.
let speeding = true; // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false'
يدعم Cairo ثلاثة عوامل منطقية يمكنها تقييم التعبيرات وصولًا إلى قيم منطقية، فتُرجع إما true أو false.
| العامل | ما معناه |
|---|---|
&& (و) |
يكون صحيحًا إذا كانت كلتا القضيتين صحيحتين. |
|| (أو) |
يكون صحيحًا إذا كانت قضية واحدة على الأقل صحيحة. |
! (لا) |
يكون صحيحًا فقط إذا كانت القضية خاطئة. |
في هذا التمرين، ستُنفّذ منطق المهمة للعبة تقمّص أدوار جديدة يعمل صديق على تطويرها. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة تمتلك كلبًا أليفًا شرسًا ووفيًا. وللأسف تقع كارثة، إذ اختُطف صديقها المفضّل أثناء بحثه عن التوت في الغابة. ستحاول أنالين العثور على صديقها المفضّل وتحريره، وقد تأخذ كلبها معها في هذه المهمة.
بعد أن أمضت بعض الوقت في تتبّع أثر صديقها المفضّل، تجد المخيّم الذي يُحتجز فيه. تبيّن أنّ هناك خاطفَين: فارس جبّار ورامٍ ماكر.
بعد أن وجدت الخاطفَين، تفكّر أنالين في أي من الإجراءات التالية يمكنها القيام به:
لديك أربع مهام: تنفيذ المنطق الذي يحدّد ما إذا كانت الإجراءات المذكورة أعلاه متاحة بناءً على حالة الشخصيات الثلاث الموجودة في الغابة وما إذا كان كلب أنالين الأليف حاضرًا أم لا.
عرّف الدالة can_fast_attack() التي تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا.
تُرجع هذه الدالة true إذا كان يمكن شنّ هجوم سريع بناءً على حالة الفارس.
وإلا فتُرجع false:
let knight_awake = true;
can_fast_attack(knight_awake); // false
عرّف الدالة can_spy() التي تأخذ ثلاث قيم منطقية، تشير إلى ما إذا كان الفارس والرامي والسجين، على الترتيب، مستيقظين.
تُرجع الدالة true إذا كان يمكن التجسّس على المجموعة، بناءً على حالة الشخصيات الثلاث.
وإلا فتُرجع false:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true
عرّف الدالة can_signal_prisoner() التي تأخذ قيمتين منطقيتين، تشير إلى ما إذا كان الرامي والسجين، على الترتيب، مستيقظين.
تُرجع الدالة true إذا كان يمكن الإشارة إلى السجين، بناءً على حالة الشخصيتين.
وإلا فتُرجع false:
let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true
عرّف الدالة can_free_prisoner() التي تأخذ أربع قيم منطقية.
تشير المعاملات الثلاثة الأولى إلى ما إذا كان الفارس والرامي والسجين، على الترتيب، مستيقظين.
ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف حاضرًا.
تُرجع الدالة true إذا كان يمكن تحرير السجين بناءً على حالة الشخصيات الثلاث ووجود كلب أنالين الأليف.
وإلا فتُرجع false:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false
سجّل في Exercism لتتعلّم وتتقن Cairo عبر 25 مفهومًا68 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.