반복문의 break와 continue는 대체가능하다

J.Noma·2021년 10월 7일
0

1. 함수 세분화 중 발생한 어려움

함수 세분화는 어떤 Flow를 가진 코드든 시간만 들이면 가능하다고 믿고 있던 찰나, 난관에 봉착했다

반복문 내에 있는 breakcontinue는 어떻게 분리하지?

이미 알고있듯이, 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는 별도의 함수로 빼낼 수 없다


2. if문으로 continue 대체하기

다행히도, breakcontinueif문을 변형하여 대체할 수 있다

우선 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와 동일한 기능을 구현할 수 있다


3. if문으로 break 대체하기

이제 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와 동일한 기능을 구현할 수 있다

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe

0개의 댓글