합성함수를 함수형 코드로 만들어보자! 이번에는
go()
,map()
을 이용한다.
합성함수 변형하기
A. 합성 함수 + map함수
: 우리는 함수형으로 합성 함수를 만들고자 한다.
: 먼저 f(x), g(x)를 map
을 이용한 함수로 만든다.
: 그 다음, map으로 구성한 두 함수로 f(g(x))
를 만든다.
const f = x => x + 10;
const g = x => x - 5;
const fg = x => f(g(x));
console.log(fg(10)); //15
console.log(fg()) //NaN
하지만,이 합성함수를 더 간단하게 표현하고 싶어!
go()를 사용해보자!
B. 합성 함수 + go()
go 함수를 앞선 챕터에서 설명했으나, 반복하면 기억하기 쉬우니 다시 설명을 적어본다 :)
go함수 |
---|
- 인자를 받아 결과를 바로 산출함 |
- 첫번째 인자가 시작값. - 두 번째 인자부터는 함수를 받음. - 첫번째 인자가 두번째 함수의 매개변수로 작용하여 결과를 만들고 - 그 결과가 또 세번째 함수의 매개변수가 되어 결과를 만드는 과정을 수행 |
: 이제 go함수를 이용해 합성함수를 좀 더 함수형스럽게 만들어보자.
_.go(
10,
fg,
console.log //15
)
앗! 그런데 앞선 코드 예시(A)에서는 인자를 넘기지 않으면 NaN이 출력되었다!
하지만 나는 인자가 없으면 아무것도 출력 시키고 싶지 않다...!
아래 방법을 보자
C. 합성 함수 + .each() & .map()
: 코드를 보기에 앞서, each(), map()함수에 대해 알아보자!
each(list, iteratee, [context]) |
---|
- list: 값을 저장하는 공간 (ex. 배열, 객체) |
- iterate: list의 각 요소를 반복적으로 돌리는 함수 |
- 각 요소가 함수의 인자로 작용하지만, 그 결과를 리턴하진 않는다. - 함수 적용 결과를 보려면 console.log을 이용해 출력해야한다. - 반복문이랑 비슷한 느낌이다. |
map(list, iteratee, [context]) |
---|
- list: 값을 저장하는 공간 (ex. 배열, 객체) |
- iterate: list의 각 요소를 변형시키는 함수 |
- 함수에 의해 변형된 요소를 리턴한다. |
앞선 두 함수의 공통점은
객체, 배열
등반복 가능한 객체
가 주어져야 한다는 점이다.
이 말은 사용자가 빈 배열, 빈 객체를 주면 실행 조차 하지 않는다는 말이 될 수 있다.
: 결국, 인자가 없을 때 빈 값을 주려면 아래와 같이 두 함수를 사용하면 된다.
_.go (
[], //a. 빈 배열
L.map(fg), //b.인자가 없으니 map실행 x
_.each(console.log) //c.인자가 없으니 each 실행x
//d. 결과적으로 출력하지 않음
)
출처
반응형
'개발 기술 > 함수형 프로그래밍' 카테고리의 다른 글
함수형 코드 만들기, 별 그리기 & 구구단 (0) | 2021.09.26 |
---|---|
함수형 코드 만들기, 홀수 n개 더하기 (0) | 2021.09.26 |
함수형 프로그래밍이란? (0) | 2021.09.26 |
댓글