لا يحتوي النوع bool (اختصارًا لكلمة boolean) إلا على قيمتين: true وfalse. ولا تفرّق القيمتان الحرفيتان true وfalse بين حالة الأحرف الكبيرة والصغيرة في الكود.
<?php
$value_is_true = true;
$value_is_false = false;
غالبًا ما تُستخدم القيم المنطقية في التعبيرات المنطقية كنتيجة لعامل، ثم تُستخدم في بنى التحكم.
هناك عدة عوامل منطقية:
!$a: يُرجع true إذا لم تكن $a تساوي true
$a && $b: يُرجع true إذا كانت $a و$b كلتاهما true
$a || $b: يُرجع true إذا كانت $a أو $b تساوي true
يوجد عاملان هما and وor، وهما مكمّلان للعاملين && و|| على الترتيب. لكن سلوكهما ليس كسلوك && و||، وقد يُنتجان نتائج غير متوقعة، لذا لا يُنصح باستخدامهما.
في هذا التمرين، ستقوم بتنفيذ منطق المهمة في لعبة تقمص أدوار جديدة يعمل صديقك على تطويرها. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة تمتلك كلبًا أليفًا شرسًا ووفيًا. ولسوء الحظ، تقع الكارثة، إذ اختُطف صديقها الأعز أثناء بحثه عن التوت في الغابة. ستحاول أنالين العثور على صديقها الأعز وتحريره، وقد تأخذ كلبها معها في هذه المهمة.
بعد أن أمضت بعض الوقت في تتبّع أثر صديقها الأعز، تجد المخيّم الذي يُحتجز فيه. يتّضح أن هناك خاطفَين: فارس جبار ورامٍ ماكر.
بعد أن وجدت الخاطفَين، تفكّر أنالين في أي من الإجراءات التالية يمكنها القيام به:
أمامك أربع مهام: تنفيذ المنطق الذي يحدّد ما إذا كانت الإجراءات أعلاه متاحة بناءً على حالة الشخصيات الثلاث الموجودة في الغابة وما إذا كان كلب أنالين الأليف حاضرًا أم لا.
نفّذ دالة باسم canFastAttack تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا.
تُرجع هذه الدالة true إذا كان إجراء "الهجوم السريع" متاحًا بناءً على حالة الشخصية.
وإلا فستُرجع false:
<?php
$is_knight_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canFastAttack($is_knight_awake);
// => false
نفّذ دالة باسم canSpy تأخذ ثلاث قيم منطقية تشير، على الترتيب، إلى ما إذا كان الفارس والرامي والسجين مستيقظين.
تُرجع الدالة true إذا كان إجراء "التجسّس" متاحًا بناءً على حالة الشخصيات.
وإلا فستُرجع false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSpy($is_knight_awake, $is_archer_awake, $is_prisoner_awake);
// => true
نفّذ دالة باسم canSignal تأخذ قيمتين منطقيتين تشير، على الترتيب، إلى ما إذا كان الرامي والسجين مستيقظين.
تُرجع الدالة true إذا كان إجراء "إشارة إلى السجين" متاحًا بناءً على حالة الشخصيات.
وإلا فستُرجع false:
<?php
$is_archer_awake = false;
$is_prisoner_awake = true;
$infiltration = new AnnalynsInfiltration();
$infiltration->canSignal($is_archer_awake, $is_prisoner_awake);
// => true
نفّذ دالة باسم canLiberate تأخذ أربع قيم منطقية.
تشير المعاملات الثلاثة الأولى، على الترتيب، إلى ما إذا كان الفارس والرامي والسجين مستيقظين.
ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف حاضرًا.
تُرجع الدالة true إذا كان إجراء "تحرير السجين" متاحًا بناءً على حالة الشخصيات ووجود كلب أنالين الأليف.
وإلا فستُرجع false:
<?php
$is_knight_awake = false;
$is_archer_awake = true;
$is_prisoner_awake = false;
$is_dog_present = false;
$infiltration = new AnnalynsInfiltration();
$infiltration->canLiberate(
$is_knight_awake,
$is_archer_awake,
$is_prisoner_awake,
$is_dog_present
);
// => false
سجّل في Exercism لتتعلّم وتتقن PHP عبر 11 مفهومًا122 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.