함수형 프로그래밍에는 여러 공통 함수들이 있다.
예시만 보면 파악할 수 있는 것들이 많은데
reduce는 예시만 봐서는 도대체 뭔지 하나도 모르겠다.
그리고 객체 지향 프로그램에서는 reduce와 같은 패턴을 쓸 경우가 많이 없어서 생각해 내기 쉽지 않다.
하지만 가장 기초적인 최대, 최소값을 구하는 경우 대표적으로 reduce 함수를 사용한다.
function getMax(numbers) {
var max = numbers[0];
numbers.forEach(number => {
max = max < number ? number : max;
});
return max;
}
getMax함수는 numbers라는 숫자로 구성된 배열을 넣으면
max값과 다음 배열값을 계속 비교한 후
max값을 반환한다.
배열을 넣었더니 number로 줄어든 값을 반환했다.
reduce라는 것은 이렇게 뭔가 나열된 것을 하나로 줄여서 반환한다는 뜻이다.
그리고 reduce는 함수를 인수로 받는다.
그리고 이 함수는 이항함수이고 max와 number가 인수가 된다.
자바스크립트는 첫번째 인자에 reduce값을 반환한다.
이를 람다식으로 표현하면 아래와 같다.
(max, number) => max
이게 기본적으로 reduce에 들어가는 함수 형식이다.
return값만 필요한 알고리즘으로 구현해 주면 된다.
var max = numbers.reduce( (max, number) => {
max = max < number ? number : max;
return max;
});
아래와 같이 더 줄여 쓸 수 있다.
var max = numbers.reduce( (max, number) => max < number ? number : max);
추가로 reduce를 사용할 때 초기값 설정이 필요한 경우가 있다.
javascript에서는 reduce의 두번째 인자가 초기값인데
reduce( function, initialValue) 다.
function의 두번째 인자랑 헷갈리지 말긴 바란다.
초기화된 객체가 필요한 경우
reduce( function, {} )
이렇게 해주면 된다.
'javascript' 카테고리의 다른 글
callback 패턴 함수를 await로 쓰는 방법 (0) | 2018.05.01 |
---|---|
nodeJs require (0) | 2018.04.13 |
promise 대신 async, await를 사용하자 (0) | 2018.03.22 |
let의 필요성 (0) | 2018.03.20 |
async function 과 await (0) | 2018.03.10 |