기능적 JavaScript — 커링
지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.
JavaScript는 부분적으로 함수형 언어입니다.
JavaScript를 배우려면 JavaScript의 기능적인 부분을 배워야 합니다.
이 기사에서는 JavaScript로 커링을 사용하는 방법을 살펴보겠습니다.
단항 함수
단항 함수는 단일 인수를 취하는 함수입니다.
예를 들어, 단항 함수는 다음과 같습니다.
const identity = (x) => x;
이진 함수
이진 함수는 2개의 인수를 취하는 함수입니다.
하나의 예는 다음과 같습니다.
const add = (x, y) => x + y;
가변 함수
가변 함수는 가변 개수의 인수를 취하는 함수입니다.
나머지 연산자를 사용하여 JavaScript에서 가변 함수를 정의할 수 있습니다.
function variadic(...args) {
console.log(args)
}
args
에는 우리가 전달하는 모든 인수의 배열이 있습니다.카레
Curry는 여러 인수가 있는 함수를 중첩된 단항 함수로 변환합니다.
이것은 일부 인수가 적용된 함수를 생성할 수 있기 때문에 유용합니다.
예를 들어, 이진 함수를 변환할 수 있습니다.
const add = (x, y) => x + y;
다음을 작성하여 다른 단항 함수를 반환하는 함수 단항 함수로:
const addCurried = x => y => x + y;
addCurried
함수는 매개변수x
를 사용하고 y
와 x
의 합을 함께 반환하는 매개변수y
를 사용하는 함수를 반환합니다.그런 다음 다음과 같이 작성하여 사용할 수 있습니다.
const add1 = addCurried(1);
const sum = add1(2);
addCurried
가 1로 설정된 함수를 반환하고 x
변수에 할당하기 위해 1로 add
를 호출했습니다.그런 다음 2로
add1
를 호출하여 최종 합계를 반환합니다.우리는 이진 함수인 하나의 인수를 취하는 함수를 반환하는 함수를 만들어 이를 일반화할 수 있습니다.
해당 함수 내에서 두 번째 인수를 취하는 함수를 반환합니다.
그리고 그 내부에서 외부 함수의 매개변수로 호출된 이진 함수의 결과를 반환합니다.
예를 들어 다음과 같이 작성할 수 있습니다.
const curry = (binaryFn) => {
return (firstArg) => {
return (secondArg) => {
return binaryFn(firstArg, secondArg);
};
};
};
const add = (x, y) => x + y
const sum = curry(add)(1)(2);
우리가 설명한 것을 수행하기 위해
curry
함수를 생성합니다.그런 다음
add
함수와 같은 이진 함수를 전달할 수 있습니다.그러면 자동으로 카레가 됩니다.
인수가 하나만 남을 때까지 하나의 인수로 함수를 재귀적으로 반환하는
curry
함수로 이것을 더 일반화할 수 있습니다.예를 들어 다음과 같이 작성할 수 있습니다.
let curry = (fn) => {
if (typeof fn !== 'function') {
throw Error('No function provided');
}
return function curriedFn(...args) {
if (args.length < fn.length) {
return function(...moreArgs) {
return curriedFn(...[...args, ...moreArgs]);
};
}
return fn(...args);
};
};
fn
가 함수인지 확인합니다.그렇다면
fn
에 args
보다 더 많은 매개변수가 있는 경우 반환되는 동일한 함수를 호출하는 함수를 반환하는 함수를 반환합니다.fn
보다 args
에 인수가 더 많다면 더 많이 카레를 만들 수 있다는 의미입니다.커리된 함수의 매개변수 수가
fn
의 매개변수 수와 같으면 더 커링할 수 없습니다.그래서 우리는 그냥 함수를 호출합니다.
그런 다음 다음과 같이 작성하여 호출할 수 있습니다.
const add = (x, y, z) => x + y + z;
const sum = curry(add)(1)(2)(3);
우리는 함수를 커리 처리했으므로 개별 인수를 사용하여 커리 함수를 호출합니다.
그리고
sum
는 모든 숫자를 더하기 때문에 6입니다.결론
일부 인수가 적용된 함수를 만들고 다른 용도로 해당 함수를 재사용할 수 있도록 함수를 커리할 수 있습니다.
Reference
이 문제에 관하여(기능적 JavaScript — 커링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/functional-javascript-currying-5hab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)