map, filter 결합법칙
특정한 방식으로 다르게 평가 순서를 바꿔도 똑같은 결과를 만든다는 결합 법칙을 가진다.
사용하는 데이터가 무엇이든지, 사용하는 보조 함수가 순수 함수라면 무엇이든지 아래와 같이 결합한다면 둘 다 결과가 같게 출력된다.
[[mapping, mapping], [filtering, filtering], [mapping, mapping]]
=
[[mapping, filtering, mapping], [mapping, filtering, mapping]]
즉시 평가하지 않고 지연 평가를 하기 때문에, mapping -> filtering -> mapping의 과정은 동일하게 처리되게 된다. 가로로 계산을 진행하는 것이나, 세로로 하나하나 함수를 거치는 것이나 동일하게 처리된다.
지연평가의 장점
함수와 함수가 리턴값을 통해서 내가 원하는 시점에 평가하고자 할 때 사용할 수 있도록 지연성 있게 코드를 작성할 수 있다. 이는 다른 라이브러리 등에서 코드를 가져와 사용하는 것이 아닌 순수한 자바스크립트에서 객체로 사용할 수 있기 때문에 조합성이 높은 편이다.
이로서 본 강의를 절반 정도 수강했다. 처음에는 이터러블을 왜 배우는 것인지 생소하였다. 아무래도 깊게 생각해본 적이 없는 코드이고 공부의 필요성을 느끼지 못했기 때문이다. 이터러블에서 점점 더 나아가 제너레이터를 배우고, 사용자 정의 함수를 만들면서 go, pipe, curry로 함수를 합성하여 코드를 간단하게 만드는 것까지 확인헀다. 그리고 최근에는 지연평가를 도입해, 기존의 map, filter 등의 함수를 더 낮은 시간 복잡도로 사용할 수 있었다. 이러한 일련의 과정이 개별적으로 놓고 보았을 때보다 서로 연계해서 확인했을 때 연관성이 깊고 꼭 알고 있어야 하는 지식들이었기 때문에 강의 내용을 이해하는 데 좋았고, 지연 평가의 과정과 용도 및 효율성을 알 수 있어서 좋았다.
출처: 인프런 함수형 프로그래밍과 JavaScript ES6+
'프론트엔드 > JS' 카테고리의 다른 글
[JavaScript] Array.prototype.join 보다 다형성 높은 join 함수 (0) | 2023.05.08 |
---|---|
[JavaScript] map, filter & reduce로 결과를 만드는 함수 생성 (0) | 2023.05.07 |
[JavaScript] L.range, L.map, L.filter, take의 평가 순서 및 효율성 (0) | 2023.05.03 |
[JavaScript] reduce, map, filter, take 중첩 사용 (0) | 2023.05.03 |
[JavaScript] 제너레이터/이터레이터 프로토콜로 구현하는 지연 평가 (0) | 2023.05.02 |