تُمثَّل القيم المنطقية في Go بالنوع المنطقي المعلن مسبقًا bool، ويمكن أن تكون قيمه إما true أو false. وهو نوع معرَّف.
var closed bool // boolean variable 'closed' implicitly initialized with 'false'
speeding := true // boolean variable 'speeding' initialized with 'true'
hasError := false // boolean variable 'hasError' initialized with 'false'
يدعم Go ثلاثة عوامل منطقية يمكنها تقييم التعبيرات وصولًا إلى قيم منطقية، فتُرجع إما true أو false.
| العامل | ما يعنيه |
|---|---|
&& (و) |
تكون صحيحة إذا كانت القضيتان صحيحتين. |
|| (أو) |
تكون صحيحة إذا كانت قضية واحدة على الأقل صحيحة. |
! (ليس) |
تكون صحيحة فقط إذا كانت القضية خاطئة. |
في هذا التمرين، ستُنفّذ منطق المهمة للعبة تقمص أدوار جديدة يطورها صديق لك. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة تمتلك كلبًا أليفًا شرسًا ووفيًا. للأسف، تقع كارثة، حيث اختُطف صديقها المفضل أثناء بحثه عن التوت في الغابة. ستحاول أنالين العثور على صديقها المفضل وتحريره، مع إمكانية اصطحاب كلبها معها في هذه المهمة.
بعد بعض الوقت الذي قضته في تتبع أثر صديقها المفضل، تجد المخيم الذي يُحتجز فيه صديقها المفضل. اتضح أن هناك خاطفين: فارس جبار ورامٍ ماكر.
بعد أن وجدت الخاطفين، تفكر أنالين في أي من الإجراءات التالية يمكنها القيام بها:
لديك أربع مهام: تنفيذ المنطق لتحديد ما إذا كانت الإجراءات المذكورة أعلاه متاحة بناءً على حالة الشخصيات الثلاث الموجودة في الغابة وما إذا كان كلب أنالين الأليف موجودًا أم لا.
عرّف الدالة CanFastAttack() التي تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا.
تُرجع هذه الدالة true إذا كان يمكن شن هجوم سريع بناءً على حالة الفارس.
وإلا، فتُرجع false:
var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false
عرّف الدالة CanSpy() التي تأخذ ثلاث قيم منطقية، تشير إلى ما إذا كان الفارس والرامي والسجين، على الترتيب، مستيقظين.
تُرجع الدالة true إذا كان يمكن التجسس على المجموعة، بناءً على حالة الشخصيات الثلاث.
وإلا، فتُرجع false:
var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true
عرّف الدالة CanSignalPrisoner() التي تأخذ قيمتين منطقيتين، تشير إلى ما إذا كان الرامي والسجين، على الترتيب، مستيقظين.
تُرجع الدالة true إذا كان يمكن إرسال إشارة إلى السجين، بناءً على حالة الشخصيتين.
وإلا، فتُرجع false:
var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true
عرّف الدالة CanFreePrisoner() التي تأخذ أربع قيم منطقية.
تشير المعاملات الثلاثة الأولى إلى ما إذا كان الفارس والرامي والسجين، على الترتيب، مستيقظين.
يشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف موجودًا.
تُرجع الدالة true إذا كان يمكن تحرير السجين بناءً على حالة الشخصيات الثلاث ووجود كلب أنالين الأليف.
وإلا، فتُرجع false:
var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false
سجّل في Exercism لتتعلّم وتتقن Go عبر 34 مفهومًا165 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.