반복하는 람다에선 break 와 continue 를 어떻게 구현할까?

kitty·2022년 1월 28일
0
post-thumbnail

일반적인 반복문의 형태에선

1)과 같은 경우엔 리스트의 원소들을 순회하는 중에 bar 를 만나면 루프를 빠져나간다.
따라서 콘솔(표준출력스트림)에 value 값으로 foo만 출력된다며

2)와 같은 경우엔 리스트의 원소들을 순회하는 중에 bar 를 만나면 다음 라인을 무시하고 순회를 이어간다.
따라서 콘솔에는 value 값으로 bar을 제외한 모든 원소들이 출력된다며

그치만 루프를 반복문이 아니라 람다함수를 이용해서 나타낸다면 위와 똑같은 양상이 될 수 있을까?

.
.

람다는 break 나 continue 처럼 for statement 의 키워드가 존재하지 않기에 이렇게 return 으로 처리하게 된다며.
위와 같이 처리하면 목록의 값들에서 bar 를 만나게 되면 루프를 탈출하게 될듯 싶다며

그치만..

실행하면 break 가 아니라 continue 처럼 되어보렸담 🥺

forEach 라는 고차함수의 성질을 이해하면 위의 현상을 납득할 수 있다며. 준함수는 파라미터로 받는 함수를 원소의 갯수만큼 호출하기 때문에 람다 내부에서의 리턴은 forEach의 입장에선 continue 와 같은 측면이 되어버리는거라며.

따라서 람다함수를 이용한 continue 는 위와 같이 구현할 수 있다며.

그러면.. break 는 어쩌지?

자세히보면... forEach 위에 run 이라는 고차함수가 있단 사실을 발견하게 된담서.
얘는 왜 있는걸까?

이유는 forEach 라는 고차함수를 '스콥화'시키기 위해서라며.
따라서 run 이라는 고차함수를 탈출할 수 있다면 자연히 forEach라는 스콥도 함께 탈출할 수 있게 된담서

이렇게 return 하는 스콥을 람다함수가 아니라 run 전체로 확장시키면 이젠 조건을 만족할 경우 람다를 탈출하는것이 아니라 forEach 전체를 탈출할 수 있게 된다며.

실행하면 이렇게 break 가 되었담서

실무에선 테스트를 먼저 하거나, 아니면 로직을 만든후에 충분한 테스트를 거치기 때문에 위와 같은 차이를 쉽게 발견할 수 있겠지만, 테스트를 하지 않고 개발하는 분들은 이런 차이에 대해 미리 숙지를 하고 있어야만 로직을 짜면서 예상치 못한 버그를 미연에 방지할 수 있을거라고 생각된담서.

profile
금손 꿈나무

0개의 댓글