تُمثَّل القيم التي تكون إما صحيح أو خطأ بنوع Bool.
وهو يحتوي على قيمتين فقط: true و false.
julia> true
true
julia> false
false
توجد ثلاثة عوامل منطقية في Julia.
&& هو العامل المنطقي «و».
وتكون قيمته true إذا كان التعبيران على كلا جانبي && يساويان true.
julia> true && true
true
julia> true && false
false
|| هو العامل المنطقي «أو».
وتكون قيمته true إذا كان أحد التعبيرين على أحد جانبي || يساوي true.
julia> true || true
true
julia> false || true
true
! هو العامل المنطقي «ليس».
وهو يبدّل القيمتين true و false.
julia> !true
false
julia> !false
true
للتعبيرات الأطول والأكثر تعقيدًا، من الأفضل استخدام الأقواس الهلالية لتوضيح قصدك.
julia> (true || false) && (false && true)
false
في هذا التمرين، ستكتب بعض المنطق البرمجي للعبة فيديو يطوّرها أحد أصدقائك. الشخصية الرئيسية في اللعبة هي أنالين، فتاة شجاعة لديها كلب أليف شرس ومخلص. وللأسف، تقع الكارثة عندما تُختطف صديقتها المقرّبة بينما كانت تبحث عن التوت في الغابة. ستحاول أنالين العثور على صديقتها وتحريرها، ويمكنها أن تأخذ كلبها معها في هذه المهمة.
تجد أنالين في النهاية المخيم الذي تُحتجز فيه صديقتها، وتبيّن أن هناك خاطفَين: فارسًا جبارًا وراميًا ماكرًا.
تُعرض على اللاعب بعض الخيارات لما يمكن فعله بعد ذلك. ولكل خيار من الخيارات الأربعة الممكنة، عليك كتابة دالة تخبر اللعبة ما إذا كان ينبغي إظهار ذلك الخيار أم لا.
إذا كان الفارس نائمًا، فستتمكن أنالين من شن هجوم سريع على المخيم قبل أن يستيقظ تمامًا ويرتدي درعه.
نفّذ دالة باسم can_do_fast_attack تأخذ قيمة منطقية تشير إلى ما إذا كان الفارس مستيقظًا.
تُرجع هذه الدالة true إذا كان إجراء 'Fast Attack' متاحًا بناءً على حالة الشخصية، وإلا فتُرجع false:
julia> knight_awake = true
julia> can_do_fast_attack(knight_awake)
false
يمكن التجسس على المجموعة إذا كان أحد أفرادها مستيقظًا على الأقل. وإلا فالتجسس مضيعة للوقت.
نفّذ دالة باسم can_spy تأخذ ثلاث قيم منطقية تشير، على الترتيب، إلى ما إذا كان الفارس والرامي والسجينة مستيقظين.
تُرجع الدالة true إذا كان إجراء 'Spy' متاحًا بناءً على حالة الشخصيات، وإلا فتُرجع false:
# Output suppressed from the next 3 lines
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> can_spy(knight_awake, archer_awake, prisoner_awake)
true
يمكن إعطاء السجينة إشارة بأصوات الطيور إذا كانت مستيقظة والرامي نائم. أما إذا كان الرامي مستيقظًا، فلا يمكن إعطاؤها إشارة بأمان لأن الرامي مدرّب أيضًا على إشارات الطيور.
نفّذ دالة باسم can_signal_prisoner تأخذ قيمتين منطقيتين تشير، على الترتيب، إلى ما إذا كان الرامي والسجينة مستيقظين.
تُرجع الدالة true إذا كان إجراء 'Signal Prisoner' متاحًا بناءً على حالة الشخصيات، وإلا فتُرجع false:
julia> archer_awake = false
julia> prisoner_awake = true
julia> can_signal_prisoner(archer_awake, prisoner_awake)
true
يمكن لأنالين أن تحاول التسلل إلى المخيم لتحرير صديقتها. هذا أمر محفوف بالمخاطر، ولا يمكن أن ينجح إلا في إحدى الحالتين:
إذا كان كلب أنالين الأليف معها، فيمكنها إنقاذ السجينة إذا كان الرامي نائمًا. الفارس يخاف من الكلب، ولن يكون لدى الرامي وقت للاستعداد قبل أن تتمكن أنالين وصديقتها من الهرب.
إذا لم يكن الكلب مع أنالين، فعليها هي والسجينة أن تتسللا بحذر شديد! تستطيع أنالين تحرير السجينة إذا كانت مستيقظة وكان الفارس والرامي نائمين معًا، لكن إذا كانت السجينة نائمة فلا يمكن إنقاذها: إذ ستفزع من ظهور أنالين المفاجئ وتوقظ الفارس والرامي.
نفّذ دالة باسم can_free_prisoner تأخذ أربع قيم منطقية.
تشير المعاملات الثلاثة الأولى، على الترتيب، إلى ما إذا كان الفارس والرامي والسجينة مستيقظين.
ويشير المعامل الأخير إلى ما إذا كان كلب أنالين الأليف موجودًا.
تُرجع الدالة true إذا كان إجراء 'Free Prisoner' متاحًا بناءً على حالة الشخصيات، وإلا فتُرجع false:
julia> knight_awake = false
julia> archer_awake = true
julia> prisoner_awake = false
julia> dog_present = false
julia> can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present)
false
سجّل في Exercism لتتعلّم وتتقن Julia عبر 35 مفهومًا128 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.