Search
moon
sun
🏛️

[FP & JS ES6+] 2. 고차함수

Tags
Javascript
Functional Programming
Study
Last edited time
2023/10/06 15:31
2 more properties
Search
🏛️
[FP & JS ES6+] 6. 비동기: 동시성 프로그래밍 (3) - async/await, Q&A
Javascript
Functional Programming
Study
2023/10/06 14:19
🏛️
[FP & JS ES6+] 6. 비동기: 동시성 프로그래밍 (3) - async/await, Q&A
Javascript
Functional Programming
Study
2023/10/06 14:19

1. map, filter, reduce

•
특징
◦
고차함수
◦
이터러블 프로토콜을 따름
▪
이터러블 프로토콜을 따르는 객체 및 제너레이터 함수 등에 다형성 활용 가능
◦
이터러블 안의 보조함수를 활용하여 수집, 필터 등 가능

1.1. map

const map = (f, iter) => { let res = []; for (const a of iter) { res.push(f(a)); } return res; }
JavaScript
복사
예시

1.2. filter

const filter = (f, iter) => { let res = []; for (const a of iter) { if (f(a)) res.push(a); } return res; }
JavaScript
복사
예시

1.3. reduce

•
특정 값을 누적하면서 하나의 값을 만들때 사용
const reduce = (f, acc, iter) => { if (!iter) { iter = acc[Symbol.iterator](); acc = iter.next().value } for (const a of iter) { acc = f(acc, a) } return acc; }
JavaScript
복사
예시

1.4. map, filter, reduce 중첩 사용

예시

2. 코드를 값으로 다루기 (go, pipe, curry)

2.1. go

•
함수들과 인자들을 전달하여 즉시 어떤 값을 평가할 때 사용 (결과 반환)
•
인자를 받아 결과를 바로 산출해내는 함수. 값을 return하는 함수
•
args를 특정함수로 축약해서 하나의 값으로 만듦
•
reduce 함수를 사용하면 특정 리스트를 축약해서 표현 가능
예시
go를 활용하여 고차함수 중첩 사용 코드 가독성 증가 가능

2.2. pipe

•
함수를 return 하는 함수
•
함수들이 나열되어있는 합성함수를 만드는 함수
◦
내부에서 go 함수를 사용
예시

2.3. curry

•
함수를 값으로 다루면서, 받아둔 함수를 원하는 시점에 평가시키는 함수
/*** * 함수를 받아서: f * 함수를 리턴함: => * 리턴된 함수가 실행되었을 때: (a, ..._) * 인자가 2개 이상이라면: _.length ? * 받아둔 함수를 즉시 실행: f(a, ..._) * 인자가 2개 미만이라면: * - 함수를 리턴한 후에 (..._) * - 그이후에 받은 인자를 합쳐서 실행 f(a, ..._) */ const curry = f => (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._); const multi = curry((a, b) => a * b); console.log(multi.toString()); // (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._) console.log(multi(1).toString()); // (..._) => f(a, ..._) console.log(multi(1)(2)); // 6 const multi3 = multi(3); console.log(multi3(10)); // 30 console.log(multi3(5)); // 15 console.log(multi3(3)); // 9
JavaScript
복사
currying 응용 예시

2.4. 함수 조합으로 함수 만들기

예시1
예시2