Cairo에서 불리언은 미리 선언된 불리언 타입 bool로 표현되며, 값은 true 또는 false 중 하나예요.
let speeding = true; // Boolean variable 'speeding' set to 'true'
let has_error = false; // Boolean variable 'has_error' set to 'false'
Cairo는 식을 불리언 값으로 평가해 true 또는 false를 반환하는 세 가지 논리 연산자를 지원해요.
| 연산자 | 의미 |
|---|---|
&& (and) |
두 명제가 모두 참이면 참이에요. |
|| (or) |
두 명제 중 적어도 하나가 참이면 참이에요. |
! (not) |
명제가 거짓일 때만 참이에요. |
이번 연습 문제에서는 친구가 개발 중인 새로운 RPG 게임의 퀘스트 로직을 구현해요. 게임의 주인공은 Annalyn으로, 용감한 소녀예요. 그리고 사납고 충직한 반려견도 키우고 있죠. 안타깝게도, 가장 친한 친구가 숲에서 열매를 찾던 중 납치를 당하는 일이 벌어져요. Annalyn은 이 퀘스트에서 선택적으로 반려견과 함께 친구를 찾아 구출하려고 해요.
가장 친한 친구의 흔적을 한참 따라간 끝에, 친구가 갇혀 있는 캠프를 발견해요. 알고 보니 납치범은 둘이에요. 힘센 기사와 교활한 궁수죠.
납치범들을 발견한 Annalyn은 다음 중 어떤 행동을 할 수 있을지 생각해요:
해야 할 일은 네 가지예요: 숲에서 발견한 세 캐릭터의 상태와 Annalyn의 반려견 동반 여부에 따라 위 행동들이 가능한지 판단하는 로직을 구현하는 거예요.
기사가 깨어 있는지를 나타내는 불리언 값을 받는 can_fast_attack() 함수를 정의해요.
이 함수는 기사의 상태에 따라 빠른 공격이 가능하면 true를 반환해요.
그렇지 않으면 false를 반환해요:
let knight_awake = true;
can_fast_attack(knight_awake); // false
기사, 궁수, 포로가 각각 깨어 있는지를 나타내는 불리언 값 세 개를 받는 can_spy() 함수를 정의해요.
이 함수는 세 캐릭터의 상태에 따라 납치범들을 감시할 수 있으면 true를 반환해요.
그렇지 않으면 false를 반환해요:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
can_spy(knight_awake, archer_awake, prisoner_awake); // true
궁수와 포로가 각각 깨어 있는지를 나타내는 불리언 값 두 개를 받는 can_signal_prisoner() 함수를 정의해요.
이 함수는 두 캐릭터의 상태에 따라 포로에게 신호를 보낼 수 있으면 true를 반환해요.
그렇지 않으면 false를 반환해요:
let archer_awake = false;
let prisoner_awake = true;
can_signal_prisoner(archer_awake, prisoner_awake); // true
불리언 값 네 개를 받는 can_free_prisoner() 함수를 정의해요.
처음 세 매개변수는 기사, 궁수, 포로가 각각 깨어 있는지를 나타내요.
마지막 매개변수는 Annalyn의 반려견이 함께 있는지를 나타내요.
이 함수는 세 캐릭터의 상태와 Annalyn의 반려견 동반 여부에 따라 포로를 구출할 수 있으면 true를 반환해요.
그렇지 않으면 false를 반환해요:
let knight_awake = false;
let archer_awake = true;
let prisoner_awake = false;
let dog_present = false;
can_free_prisoner(knight_awake, archer_awake, prisoner_awake, dog_present); // false