함수 세분화는 어떤 Flow를 가진 코드든 시간만 들이면 가능하다고 믿고 있던 찰나, 난관에 봉착했다
반복문 내에 있는
break나continue는 어떻게 분리하지?
이미 알고있듯이, break와 continue는 반복문과 같은 함수 내에 선언되어야 동작한다
예제를 보자
// 원본
func iterateLoop() {
for each in total {
...
if each == "No..!" {
continue
}
...
}
}
// 세분화 시도: Error
func iterateLoop() {
for each in total {
play(each: each)
}
}
func play(each: String) {
...
if each == "No..!" {
continue //Error!!
}
...
}
세분화를 시도하였지만 continue는 별도의 함수로 빼낼 수 없다
다행히도,
break와continue는if문을 변형하여 대체할 수 있다
우선continue를 대체해보자
다시 예제를 보자
// 원본
func iterateLoop() {
for each in total {
...
if each == "No..!" {
continue
}
...
}
}
// 대체: if문을 변형하여 continue를 대체
func iterateLoop() {
for each in total {
...
if each != "No..!" {
...
}
}
}
// 함수세분화: Success
func iterateLoop() {
for each in total {
play(each: each)
}
}
func play(each: String) {
...
if each != "No..!" {
...
}
}
📌 정리하면,
1) if문의 조건을 뒤집고
2) if문 body를 루프 끝까지 확장하도록 변경하면
-> continue와 동일한 기능을 구현할 수 있다
이제
break도 대체해보자.
continue보다는 조금 더 변형해야 한다
// 원본
func iterateLoop() {
for each in total {
...
if each == "No..!" {
break
}
...
}
}
// 대체: if문을 변형하고 loop condition을 추가하여 break를 대체
func iterateLoop() {
for each in total where each != "No..!" {
...
if each != "No..!" {
...
}
}
}
// 함수세분화: Success
func iterateLoop() {
for each in total where each != "No..!" {
play(each: each)
}
}
func play(each: String) {
...
if each != "No..!" {
...
}
}
📌 정리하면,
1) if문의 조건을 뒤집고
2) if문 body를 루프 끝까지 확장하도록 변경
3) loop condition을 추가하면
-> break와 동일한 기능을 구현할 수 있다