10. Conditional

Cavok·2020년 9월 26일
0

1. if

- if문은 if, else 와 같은 키워드를 사용하여 조건의 참과 거짓을 판단한다음, 실행할 코드를 결정하는 문이다.

if <#condition#> {
    <#code#>
}
condition 에는 Bool표현식이 와야 한다. 표현식이 참으로 평가되면 code를 실행한다. else if를 사용하여 경우의 수를 원하는 만큼 추가해도 되고, else의 사용 역시 선택사항이다.
ex)
if true {
    print("참")
}

ex)
let name = "홍길동"
if name == "홍길동" {
    print("제 이름은 \(name)입니다.")
} else {
    print("누구시죠?")
}
else if를 사용하여 경우의 수를 무한하게 작성할 수 있다. 그러나 코드의 가독성과 효율이 떨어져, 과다한 중첩을 사용하는 것은 지양해야 한다.
ex)
let number = 41
if number > 10 {
     print("over 10")
 } else if number > 40 {
     print("over 40")
 } else if number > 50 {
     print("over 50")
 } else if number > 100 {
     print("over 100")
 }
// => "over 10"
if문을 사용하면서 주의해야 할 점은 어떤 조건식이 먼저 와야 하냐는 것이다. 까다로운 조건을 맨 앞애 위치시켜서 코드를 작성하도록 하자.
 ex)
if number > 100 {
     print("over 100")
 } else if number > 50 {
     print("over 50")
 } else if number > 40 {
     print("over 40")
 } else if number > 10 {
     print("over 10")
 }
// => "over 40"

2. Switch

- 값의 일치여부에 따라서 실행할 코드를 결정하는 구문이다. 주로 value Matching에서 많이 사용된다.

ex)
switch <#value#> {
case <#pattern#>:
    <#code#>
default:
    <#code#>
}
value에는 비교대상이, pattern에는 비교값이, code에는 matching 되었을 때 실행 할 코드가 저장된다. pattern을 콤마로 나열하여 여러개의 패턴을 매칭도 가능하다.
ex) pattern, pattern:
ex)
let age = 50
switch age {
case 10:
    print("x")
case 30:
    print("x")
case 50:
    print("o")
default:
    break
}
위의 코드에서는 age가 case 블록 50에 matching이 되어 code를 출력하고 종료될 것이다. 그러나 주의해야 할 점이 있다. 비교 대상의 모든 경우의 수가 switch문에서 구현되어야 오류가 발생하지 않는다는 것이다. 현재 코드에서는 정수가 비교대상이고, 정수의 모든 경우의 수는 무한대이기 때문에 오류가 발생한다. 그리고 이러한 오류를 방지하기 위해 switch에서는 default를 사용 할 수 있다.
//ex)
 let calc = "+"
 let a = 12
 let b = 34

 switch calc {
 case "+":
     print(a + b)
 case "-":
     print(a - b)
 case "*":
     print(a * b)
 case "/":
     print(a / b)
 default:
     break
 }
calc에 저장될 수 있는 모든 경우의 수를 처리해야 한다.
ex)
 switch a {
 case 0...10:
     print("0...10")
 case 11...100:
     print("0...100")
 default:
     break
 }
범위를 매칭시키는 코드에서도 마찬가지로, 단락평가를 고려하여 작성을 해야한다. 가장 좁은 조건인 1...10을 까다로운 조건으로 판단, 맨위에 배치시킨다.
ex)
 switch a {
 case let odd where !odd.isMultiple(of: 2):
     print("홀수")
 case let even where even.isMultiple(of: 2):
     print("짝수")
 default:
     break
Switch에서는 Value-Binding을 사용할 수도 있다. 비교대상인 'a'를 복사해서 odd에 저장후 조건을 병합시킨다.

3. Guard

- gurad문은 if문과 같이 Bool타입으로써 조건이 true일 경우 코드가 실행된다.그러나 if와 다르게 true일 때 실행되는 블록은 따로 존재하지 않으며, false일 때 실행되는 else블록만 존재할 뿐이다. 만약 true라면 guard문 다음에 작성되어 있는 코드가 실행된다.

ex)
guard <#condition#> else {
     <#statements#>
 }
else블록은 생략이 불가능할 뿐더러 내부에 실행을 중지시키는 코드가 반드시 들어가야 한다.
 ex)
func name(last: String) -> String {
    let naming = last
    guard naming == "Sab" else {
        return "x"
    }
    return "My first name is \(naming)."
}

print(name(last: "Sab")) // => "My first name is Sab."
print(name(last: "Something")) // => "x"
guard문은 주로 함수내부에서 많이 사용된다. 전역범위에서 사용되는 경우는 없다고 봐야 한다.

0개의 댓글