Swift에는 참과 거짓을 나타내는 내장 타입 Bool이 있어요. 이 타입이 표현하는 값은 true와 false예요.
Swift는 불리언 식을 조합하고 평가할 수 있도록 세 가지 논리 연산자 (!, &&, ||)를 제공해요.
&&)AND 연산자 (&&)는 두 피연산자가 모두 true일 때만 true를 반환해요.
피연산자 중 하나라도 false이면 false를 반환해요.
&& 기호의 양쪽에 식이나 불리언 값을 놓아요:
true && true // true
true && false // false
||)OR 연산자 (||)는 피연산자 중 하나 이상이 true이면 true를 반환해요.
두 피연산자가 모두 false일 때만 false를 반환해요.
|| 기호의 양쪽에 식이나 불리언 값을 놓아요:
true || true // true
true || false // true
false || false // false
!)NOT 연산자 (!)는 불리언 값을 뒤집어요.
값이 false이면 true를 반환하고, 값이 true이면 false를 반환해요.
값이나 식 바로 앞에 ! 연산자를 놓아요:
!true // false
!false // true
())괄호를 사용하면 식을 묶고 평가 순서를 제어할 수 있어요. Swift에서는 괄호 안의 식이 먼저 평가돼요:
true && false && false || true // true
true && false && (false || true) // false
괄호로 묶으면 NOT 연산자가 복잡한 식에 어떻게 적용되는지도 정해져요:
!true && false // false (evaluates (!true) first, then false && false)
!(true && false) // true (evaluates (true && false) first to false, then !false)
평가 순서를 분명히 하거나 복잡한 조건을 읽기 쉽게 만들고 싶을 때는 괄호를 사용해요. 기본 우선순위만으로 이미 분명하다면 불필요한 괄호는 넣지 않아요.
지금 큰 인기를 끌게 될 새로운 게임 Wings Quest를 개발하는 중이에요. 이 게임에서 플레이어는 이리저리 움직이며 씨앗을 모으는 새예요. 플레이어는 모든 씨앗을 주우면 게임에서 이겨요. 플레이어가 독수리에 닿으면 씨앗을 모두 잃고 게임에서 지게 돼요. 이 규칙에는 예외가 하나 있어요. 플레이어가 파워업을 활성화한 상태라면 다른 새들보다 더 높이 날 수 있어요.
목표는 게임에서 사용될 규칙 몇 가지를 작성하는 거예요.
게임에서 새는 파워업을 가진 상태로 독수리에 닿으면 보너스 점수를 받아요.
두 개의 인자를 받는 함수 bonusPoints(powerUpActive:touchingEagle:)를 정의해요. powerUpActive는 새가 활성화된 파워업을 가지고 있는지를 담고, touchingEagle은 새가 독수리에 닿아 있는지를 담아요.
이 함수는 새가 파워업을 활성화한 상태이며 독수리에 닿아 있을 때에만 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.
bonusPoints(powerUpActive: false, touchingEagle: true)
// Returns false
게임에서 플레이어는 씨앗이나 파워업을 주우면 점수를 얻어요.
두 개의 인자를 받는 함수 score(touchingPowerUp:touchingSeed:)를 정의해요. touchingPowerUp은 새가 파워업에 닿아 있는지를 담고, touchingSeed는 새가 씨앗에 닿아 있는지를 담아요.
이 함수는 새가 파워업이나 씨앗에 닿아 있으면 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.
score(touchingPowerUp: true, touchingSeed: true)
// Returns true
두 개의 인자를 받는 함수 lose(powerUpActive:touchingEagle:)를 정의해요. powerUpActive는 새가 활성화된 파워업을 가지고 있는지를 담고, touchingEagle은 새가 독수리에 닿아 있는지를 담아요.
이 함수는 새가 독수리에 닿아 있고 활성화된 파워업이 없으면 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.
lose(powerUpActive: false, touchingEagle: true)
// Returns true
다음 인자들을 받는 win(hasPickedUpAllSeeds:powerUpActive:touchingEagle:) 함수를 정의해요.
hasPickedUpAllSeeds는 새가 모든 씨앗을 주웠는지 여부를 나타내요.powerUpActive는 새가 파워업을 활성화했는지 여부를 나타내요.touchingEagle은 새가 독수리에 닿아 있는지 여부를 나타내요.이 함수는 새가 모든 씨앗을 모았고 3번에서 정의한 인자들에 따라 지지 않은 경우에 true를 반환하고, 그렇지 않으면 false를 반환해야 해요.
win(hasPickedUpAllSeeds: false, powerUpActive: true, touchingEagle: false)
// Returns false
Exercism에 가입하고 Swift 트랙을 개념 35개연습 문제 116개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.