함수의 return에 대한 고민
- 함수의 바디에서 return을 만나면 그 이후는 진행하지도 않고 끝난다!
// Code after 'return' will never be executed!
// 항상 true를 return한다!
func returnBool(x: Int) -> Bool {
return true
if x > 5 {
return true
}
return false
}
- 아래와 같은 예에서도 만약 x가 5보다 클 경우, if문을 만족하므로 return true를 하고 함수를 끝낸다!
func returnBool(x: Int) -> Bool {
if x > 5 {
return true
}
return false
}
print(returnBool(x: 6)) // true
for 문 속 guard문
- 아래의 코드에서는 문제가 생긴다!
- return을 쓸 수는 없고 break나 continue를 활용해야된다.
for i in 0..<5 {
guard i < 4 else { return } //error
print(i)
}
함수 안 for 문 속 guard문
- 앞서 본 것처럼, 함수의 바디에서 return을 만나면 그 이후는 진행하지도 않고 끝난다!
- for문을 돌다가 guard문의 else문을 타서 return을 만나는 순간 for문만 종료되는 것이 아니라, 함수 전체가 종료된다!
func 함수() {
for i in 0..<7 {
print("guard문 전 \\(i)")
guard i < 4 else { return }
print("guard문 후 \\(i)")
print("------------")
}
}
함수()
"""
guard문 전 0
guard문 후 0
------------
guard문 전 1
guard문 후 1
------------
guard문 전 2
guard문 후 2
------------
guard문 전 3
guard문 후 3
------------
guard문 전 4
"""
- 그렇다면, 아래와 같은 예는 어떻게 될까? for문이 중첩되어있다면?
- 이것 또한, 위와 같은 결과를 던진다. return을 만나는 순간 그냥 함수 자체가 종료된다!
func 함수() {
for _ in 0..<3 {
for i in 0..<7 {
print("guard문 전 \\(i)")
guard i < 4 else { return }
print("guard문 후 \\(i)")
print("------------")
}
}
}
함수()
"""
guard문 전 0
guard문 후 0
------------
guard문 전 1
guard문 후 1
------------
guard문 전 2
guard문 후 2
------------
guard문 전 3
guard문 후 3
------------
guard문 전 4
"""
⁉️ 중첩 for문 속 continue와 break
- 가장 인접한 for문에만 영향을 준다!
- 인접한 for문 외에 for문은 아무런 영향을 받지 않는다.