자바스크립트의 함수형 결합기 소개
구성하다
고등학교 수학 시간에 이것을 "작성"또는 "°"로 기억할 수 있습니다. 두 함수 f와 g가 주어집니다(g ∘ f )(x) = g(f(x))
. JS에서 다음과 같이 구현할 수 있습니다.
const compose = (g, f) => (x) => g(f(x))
이것은 고차 함수, 즉 함수를 인수로 받거나 반환하는 함수입니다. Compose는 둘 다 수행하여 두 개의 함수를 취한 다음 인수를 두 번째 함수에 적용한 다음 결과를 첫 번째 함수에 적용하는 하나를 반환합니다. 다음을 설명하기 위해 몇 가지 예제 함수를 만들어 보겠습니다.
const inc = n => n + 1;
const half = n => n / 2;
const operate = compose(half, inc);
console.log(operate(3)) //=> 2
고려해야 할 중요한 제약이 있습니다. compose 함수는 하나의 인수를 취하는 함수(단항 함수)에서만 작동합니다. 두 배로 번거로운 것은 작성 자체가 두 개의 인수를 취하므로 프랙탈 방식으로 사용할 수 없다는 것입니다. 그러면 안 됩니다. 다행스럽게도 함수를 단항으로 만드는 멋진 트릭이 있습니다. 바로 커링입니다.
카레
Currying은 여러 인수를 받는 함수를 첫 번째 인수를 취하고 결과를 반환하기 전에 모든 인수가 전달될 때까지 재귀적으로 다음 인수를 받는 함수로 변환하는 행위입니다. 예를 들어 위의 inc
함수를 add
함수를 기반으로 리팩터링해 보겠습니다.
const add = (n, m) => n + m;
위의 add
함수는 일반적인 2인수(이진) 함수이지만 n
와 m
사이에 화살표를 넣어 커리할 수 있습니다.
const add = n => m => n + m;
// now that its curried we can partially apply it to create
// our inc function from before
const inc = add(1);
다시 방문하여 작성
이제 카레하는 방법을 알았으니 작성 함수 자체를 카레로 만들어 봅시다. 이것은 B-combinator로도 알려져 있으므로 여기서는 B-combinator라고 부르겠습니다.
const B = g => f => x => g(f(x));
// usage is similar to before
const operate = B(half)(inc)
부분적으로 적용된 작성 기능이 무엇인지 생각하기 어려울 수 있습니다. 다른 프로그램에 딱 맞는 어댑터가 있는 프로그램으로 생각하고 싶습니다. B(half)
는 프로그램을 가져와 결과를 2로 나누는 프로그램을 반환하는 함수입니다.
이것을 사용하기에 가장 좋은 장소 중 하나는 중첩된 함수 호출을 볼 수 있는 모든 곳입니다.
const process = (arr) =>
arr.map(a =>
getUser(getFirstName(a))
);
// can be rewritten as
const process = (arr) =>
arr.map(B(getUser)(getFirstName));
이것은 빙산의 일각에 불과하며 직접 작성하고 가지고 놀아 보시기 바랍니다.
Reference
이 문제에 관하여(자바스크립트의 함수형 결합기 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/jethrolarson/intro-to-functional-combinators-in-javascript-4ae9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const compose = (g, f) => (x) => g(f(x))
const inc = n => n + 1;
const half = n => n / 2;
const operate = compose(half, inc);
console.log(operate(3)) //=> 2
Currying은 여러 인수를 받는 함수를 첫 번째 인수를 취하고 결과를 반환하기 전에 모든 인수가 전달될 때까지 재귀적으로 다음 인수를 받는 함수로 변환하는 행위입니다. 예를 들어 위의
inc
함수를 add
함수를 기반으로 리팩터링해 보겠습니다.const add = (n, m) => n + m;
위의
add
함수는 일반적인 2인수(이진) 함수이지만 n
와 m
사이에 화살표를 넣어 커리할 수 있습니다.const add = n => m => n + m;
// now that its curried we can partially apply it to create
// our inc function from before
const inc = add(1);
다시 방문하여 작성
이제 카레하는 방법을 알았으니 작성 함수 자체를 카레로 만들어 봅시다. 이것은 B-combinator로도 알려져 있으므로 여기서는 B-combinator라고 부르겠습니다.
const B = g => f => x => g(f(x));
// usage is similar to before
const operate = B(half)(inc)
부분적으로 적용된 작성 기능이 무엇인지 생각하기 어려울 수 있습니다. 다른 프로그램에 딱 맞는 어댑터가 있는 프로그램으로 생각하고 싶습니다. B(half)
는 프로그램을 가져와 결과를 2로 나누는 프로그램을 반환하는 함수입니다.
이것을 사용하기에 가장 좋은 장소 중 하나는 중첩된 함수 호출을 볼 수 있는 모든 곳입니다.
const process = (arr) =>
arr.map(a =>
getUser(getFirstName(a))
);
// can be rewritten as
const process = (arr) =>
arr.map(B(getUser)(getFirstName));
이것은 빙산의 일각에 불과하며 직접 작성하고 가지고 놀아 보시기 바랍니다.
Reference
이 문제에 관하여(자바스크립트의 함수형 결합기 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/jethrolarson/intro-to-functional-combinators-in-javascript-4ae9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const B = g => f => x => g(f(x));
// usage is similar to before
const operate = B(half)(inc)
const process = (arr) =>
arr.map(a =>
getUser(getFirstName(a))
);
// can be rewritten as
const process = (arr) =>
arr.map(B(getUser)(getFirstName));
Reference
이 문제에 관하여(자바스크립트의 함수형 결합기 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jethrolarson/intro-to-functional-combinators-in-javascript-4ae9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)