Булеві значення (англ. Boolean) у 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.
| Оператор | Що це означає |
|---|---|
&& (логічне і) |
Дає правду, якщо обидва твердження правдиві. |
|| (логічне або) |
Дає правду, якщо правдиве принаймні одне твердження. |
! (логічне заперечення) |
Дає правду лише тоді, коли твердження неправдиве. |
У цій вправі ми реалізуємо логіку квестів для нової рольової гри (RPG), яку розробляє друг. Головна героїня гри - Анналін, відважна дівчина з грізним і відданим псом. На жаль, трапляється лихо: її найкращого друга викрали, коли він шукав у лісі ягоди. Анналін спробує знайти й визволити найкращого друга, а може, й узяти з собою в цей квест свого пса.
Витративши деякий час на пошуки сліду найкращого друга, вона знаходить табір, у якому його тримають у полоні. Виявляється, викрадачів двоє: могутній лицар і хитрий лучник.
Знайшовши викрадачів, Анналін обмірковує, які з наведених дій вона може вжити:
На нас чекають чотири завдання: реалізувати логіку, яка визначає, чи доступні ці дії, залежно від стану трьох персонажів, знайдених у лісі, і від того, чи присутній пес Анналін.
Визначте функцію CanFastAttack(), яка приймає булеве значення (англ. Boolean), що вказує, чи не спить лицар.
Функція повертає 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 вправ та справжнє наставництво від людей, і все це безкоштовно.