Swift 조건문/반복문 Comma(,)와 &&의 차이

조현우·2022년 6월 5일
0

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(,)가 비슷해 보일지라도 구분해서 써야 한다는것을 명심하자.

profile
현우

0개의 댓글