Swift 조건문/반복문에서 사용되는 Comma(,)와 && 의 차이점을 알아보자.
먼저 Comma(,)와 &&가 어떤 상황에서 쓰이는지 알아보자.
아래 인용문은 swift 공식 문서의 if, while, guard 문법을 참조한 내용이다.
GRAMMAR OF AN IF STATEMENT
if-statement → if condition-list code-block else-clause opt
else-clause → else code-block | else if-statement
GRAMMAR OF A WHILE STATEMENT
while-statement → while condition-list code-block
condition-list → condition | condition , condition-list
condition → expression | availability-condition | case-condition | optional-binding-condition
case-condition → case pattern initializer
optional-binding-condition → let pattern initializer | var pattern initializer
GRAMMAR OF A GUARD STATEMENT
guard-statement → guard condition-list else code-block
if, while, guard 문에서 condition-list를 조건으로 사용할 수 있다는것을 확인할 수 있다.
참고) repeat-while문에서는 condition만 사용가능
condition-list란 condition을 Comma를 사용해 조건을 추가한것이다.
예를 들어보면 아래와 같다.
condition
또는
condition, condition, condition, ...
condition-list는 condition을 나열한 것 뿐만 아니라 단일 condition까지 포함한다.
그렇다면 Swift 조건/반복문에서 사용되는 condition이란 무엇일까?
공식문서에서 condition은 아래 4가지 항목을 포함한다고 명세되어있다.
condition → expression | availability-condition | case-condition | optional-binding-condition
여기서 expression이 condition에 속한다는 것을 알 수 있다.
그렇다면 expression은 무엇이고 expression으로 정의되는 기준은 무엇일까?
expression은 뜻 그대로 표현식이다.
표현식은 값, 변수, 연산자 그리고 피연산자를 사용하여 값을 갖는 수식을 의미한다.
예) number + 7
Comma(,)와 && 연산자의 사용법을 이해하기 위해 condition과 expression이 어떻게 쓰이는지 알아봤다. 이제 결론을 내보자.
/* && 연산자 -> true or false bool값의 비교가 필요한데
아래 코드의 옵셔널 바인딩 리턴값은 bool값이 아니다.
따라서 에러가 발생한다 */
if let a = someOptional && let b = someOptional { ... }
/* Comma(,) -> 상수 a, b에 옵셔널 바인딩이 정상적으로
이루어졌다면 두 condition(optional-binding-condition)을
만족하기 때문에 에러가 발생하지 않는다 */
if let a = someOptional, let b = someOptional { ... }
&& 연산자는 boolean expression을 피연산자로 사용하는 논리 연산자이다.
Comma는 조건문에서 condition뒤에 condition을 추가하는 용도로 사용된다.
&& / Comma(,)가 비슷해 보일지라도 구분해서 써야 한다는것을 명심하자.