기본 콘텐츠로 건너뛰기

라벨이 fp인 게시물 표시

reduce (함수형 프로그래밍)

  지난 주제에 reduce를 소개를 하였다.  reduce를 이용하여, map, filter, compose등 여러 함수를 만들 수 있는 것을 볼 수 있었을 것이다.  뭐 눈치는 챘겠지만 함수형 프로그래밍을 공부를 하기 위하여 작성하는 포스팅들이다. 하지만, 지난번에 작성한 reduce는 아쉬운 점이 있다. for문을 사용 하였다는 것이다.  for문이 뭐가 문제인가? 라는 생각을 할 수 있겠지만, 많은 함수형 프로그래밍 언어에서는 for, while ~ do와 같은 장치는 지원하지 않는 다는 것이다. 반복문 없이 코드를 어떻게 작성하냐 싶겠지만, 우리는 모두 안다. 재귀를 사용하면 된다는 것을....  그렇다 이번에는 reduce를 재귀를 이용하여 작성을 해보려고 한다.  reduce 재귀함수 ver. function reduce ( arr , reducer , initValue ) { if ( !arr. length ) return initValue const currentValue = arr. shift () initValue = reducer( currentValue , initValue ) return reduce ( arr , reducer , initValue ) }  재귀 함수로 코드를 작성하고자 한다면 위와 같이 작성 할 수 있을 것이다. const arr = [ 1 , 2 , 3 , 4 ] reduce(arr , (c , a) => c + a , 0 ) // 10 console.log(arr) // []  정상적으로 잘 작동 하는 듯 하였지만, shift함수를 이용 해버려서 배열의 데이터를 손상 시켰다. 이 부분은 아래와 같이 수정이 가능하다. function reduce ( arr , reducer , initValue ) { if ( !arr. length ) return initValue const [currentValue, ...othe...