Тип Bool належить до будівельних блоків мови.
Він покликаний описувати, чи є щось правдою, а чи неправдою, з відповідними значеннями True і False.
Булеві значення (англ. Boolean) можна поєднувати операторами && (логічне і) та || (логічне або), а заперечувати функцією not.
Булеві значення також надзвичайно корисні, коли треба зробити в нашому коді розгалуження, які виконуються лише за певних умов.
У Elm це робиться за допомогою виразу if-then-else, який використовують так.
if someCondition || (someOtherCondition && anotherCondition) then
doSomething
else
doSomethingElse
У цій вправі ми реалізуємо логіку квестів для нової RPG-гри, яку розробляє один друг. Головна героїня гри - Анналін, смілива дівчина, у якої є відданий і завзятий пес. На жаль, стається лихо: її найкращу подругу викрали, поки та шукала ягоди в лісі. Анналін спробує знайти й визволити свою найкращу подругу, а може, й узяти з собою пса в цю подорож.
Певний час ідучи слідом за подругою, вона знаходить табір, у якому ту увʼязнено. Виявляється, викрадачів двоє: могутній лицар і хитрий лучник.
Знайшовши викрадачів, Анналін обмірковує, які з наступних дій вона може вчинити:
У нас пʼять завдань: реалізувати логіку для визначення, чи доступні наведені дії, залежно від стану трьох персонажів, знайдених у лісі, і від того, чи присутній пес Анналін.
Реалізуйте функцію canFastAttack, яка приймає булеве значення (англ. Boolean), що вказує, чи не спить лицар. Ця функція повертає 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 вправ та справжнє наставництво від людей, і все це безкоштовно.