swift if expression에 대해서

Hashswim·2023년 10월 19일
0

지난번 swift 공식 문서를 보던중 if 구문에 대해서 궁금한점이 생겼다.

if-expression → if condition-list { statement } if-expression-tail
if-statement → if condition-list code-block else-clause?

if 구문과 if 표현식으로 다르게 존재한다는 것...

if 구문에 대해선 다들 알다시피 조건부의 참/거짓에 따라 분기처리해 작업을 진행할 수 있다..
그렇다면 if 표현식은 뭘까?

Expression과 Statement

우선 Expression은 어떠한 값으로 평가될 수 있는 코드 블록, Statement는 코드의 실행을 제어하거나 관리하는 코드 블록이다.

swift에서는 그 의미가 다른가?

그럴리 없다..

한번 조건부 표현식에 대한 부분을 찾아보자

if <#condition 1#> {
   <#expression used if condition 1 is true#>
} else if <#condition 2#> {
   <#expression used if condition 2 is true#>
} else {
   <#expression used if both conditions are false#>
}


switch <#expression#> {
case <#pattern 1#>:
    <#expression 1#>
case <#pattern 2#> where <#condition#>:
    <#expression 2#>
default:
    <#expression 3#>
}

if 구문과 차이점은 실행하는 코드 블럭이 {statement}대신 {expression}으로 작성되어 있는것을 볼 수 있다.

if 구문과 문법과 분기처리를 할 수 있다는 점은 같지만

  • 변수에 할당된 값.
  • 변수 또는 상수 선언에서 초기값.
  • throw 표현식으로 에러를 발생.
  • 함수, 클로저, 또는 프로퍼티 getter 에 의해 반환된 값.
  • 조건 표현식의 구문안에서의 값.

위와 같은 조건에서만 가능하다고 한다.
즉, 분기처리를 통해 실행되는 코드 블록이 표현식이여야 한다는 것!
어떠한 작업을 하는 구문은 올수 없다는 점이 차이점이다.

왜 if Expression?

구문은 표현식을 포함하기 때문에 if 구문만으로 충분하지 않나?
if 표현식에 대한 부분을 처음 봐서 이런게 있었나 싶었는데 바로 지난 달에 추가된 내용였다..(휴 다행😁)

아마도 swift proposal 'SE-0380'이 반영되면서 새롭게 추가된 내용인듯 하다

⭐️ 알고 갈 점

let bullet =
    if isRoot && (count == 0 || !willExpand) { "" }
    else if count == 0 { "- " }
    else if maxDepth <= 0 { "▹ " }
    else { "▿ " }

swift 5.9버전 부터 위와 같이 if 표현식을 통해 컴파일시 바로 값을 할당 할 수 있다!

기존에는

let bullet = {
    if isRoot && (count == 0 || !willExpand) { return "" }
    else if count == 0 { return "- " }
    else if maxDepth <= 0 { return "▹ " }
    else { return "▿ " }
}()

길었던 if 문법 공식문서 공부 끝..

0개의 댓글