[swift] if 문에서 콤마와 && 연산자의 차이점
코딩을 하다가 Bool? 타입의 변수에 true값이 왔는지를 체크하다가 우연히 찾게된 코드를 보고
이해하기 위해서 정리 해놓습니다. 원래 사용했던 코드는 아래와 같았습니다.
let result: Bool?
if let result = result {
if result {
print("result is true")
} else {
print("result is false")
}
} else {
print("result is nil")
}
옵셔널일 때 값이 있는지 없는지를 검증하고 나서 그 안의 값을 사용하는 코드를 짰었습니다.
하지만 실제로 false일 때의 경우에는 아무런 행동을 하지 않았기 때문에 else라인은 비어있었습니다.
논리 적으로 아래 코드와 같이 써서 사용할 수 있을 줄 알았는데 동작하지 않았습니다.
if let result = result && result {
print("result is true")
}
if let으로 옵셔널을 제거 해 준 후에 사용할 수 있기 때문입니다. 검색을 통해 찾아보니 이럴 때 comma를 이용해 코드를 명확하게 짤 수 있었습니다.
let result: Bool? = false
if let result = result , result {
print("result is true")
} else {
print("result is nil or false")
}
막상 짜 놓고 보니 &&와 comma가 왜 다른지 이 구문이 어떻게 동작하는지에 대해 잘 모르고 있었기에 정리 해 놓겠습니다.
공식 문서의 if Statement 부분을 참고해보니 이런 내용이 있었습니다.
if Statement
if 문 뒤에 조건이 오시는것은 다들 알고 계실꺼에요. 그러면 조건은 무엇일까요?
정확히 문서에는 if condition-list 라고 되어있습니다.
condition-list →
condition
|condition , condition-list
를 가리킵니다.
즉 하나의 condition이 와도 되고, condition와 condition을 ,(comma) 로 엮어 만든 condition-list가 올 수 있습니다.
그렇다면 condition
은 무엇일까요?
condition →
expression
|availability-condition
|case-condition
|optional-binding-condition
크게 이 네가지가 컨디션이 될 수 있습니다.
그 중 하나인 이 expression
를 살펴보겠습니다.
expression →
try-operator(opt)
prefix-expression
binary-expressions(opt)
이렇게 구성되어 있습니다. 하나씩 살펴보면 / | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | ?
이런 연산자를 쓴 식 입니다.
Comma VS &&
처음으로 돌아와서
if let result = result && result {
if let result = result , result {
이 두 구문이 어떻게 다른 것 일까요?
첫 번째 구문은 하나의 expression
입니다. 양쪽의 A && B 를 논리연산자로 계산해 참, 거짓의 결과를 가져옵니다.
두 번쨰 구문은 expression
, expression
으로 이루어진 condition-list
입니다. 즉 두개의 expression
이 각 각 참이 되어야 if문이 실행됩니다.
옵셔널 바인딩이 성공하고, 그 값이 참이어야 실행되는 코드를 만들 수 있겠죠.
정리
comma(,)를 이용해서 스위프트에서는 condition-list를 만들 수 있습니다. 여러개의 조건을 순처적으로 실행하고 모두 참이 되어야 한다면,
&& 연산자 말고 comma(,)를 이용해 보는 것을 어떨까요?
댓글
댓글 쓰기