Search
🏛️

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

[FP & JS ES6+] 6. 비동기: 동시성 프로그래밍 (3) - async/await, Q&A
Javascript
Functional Programming
Study
2023/10/0614:19
[FP & JS ES6+] 6. 비동기: 동시성 프로그래밍 (3) - async/await, Q&A
Javascript
Functional Programming
Study
2023/10/0614: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