커링은 여러 인수가 있는 함수를 각각 단일 인수를 사용하는 일련의 함수로 변환하는 함수형 프로그래밍의 강력한 개념입니다. 이 기술을 사용하면 더 모듈화되고 재사용 가능한 코드가 가능해집니다. JavaScript에서는 커링을 다양한 방식으로 구현할 수 있습니다. 이 블로그에서는 카레링을 살펴보고 예제를 제공하며 n 인수 카레링을 달성하기 위한 다양한 방법에 대해 논의합니다.
커링은 여러 인수를 취하는 함수를 각각 단일 인수를 취하는 일련의 함수로 변환하는 프로세스입니다. 예를 들어 함수 f(a, b, c)는 f(a)(b)(c)로 변환될 수 있습니다.
카링의 작동 원리를 이해하기 위해 기본적인 예부터 시작해 보겠습니다.
다음은 세 개의 숫자를 더하는 간단한 함수입니다.
function add(a, b, c) { return a + b + c; } console.log(add(1, 2, 3)); // Output: 6
설명: 이 add 함수는 a, b, c 세 개의 인수를 취하고 그 합계를 반환합니다. add(1, 2, 3)를 호출하면 6이 반환됩니다.
이제 이 함수를 카레 버전으로 변환해 보겠습니다.
function curryAdd(a) { return function(b) { return function(c) { return a + b + c; }; }; } console.log(curryAdd(1)(2)(3)); // Output: 6
설명: curryAdd 함수는 인수 a를 취하고 인수 b를 취하는 함수를 반환하며, 이는 차례로 인수 c를 취하는 함수를 반환합니다. 마지막 함수는 a, b, c의 합을 반환합니다. curryAdd(1)(2)(3)을 호출하면 중첩된 함수를 통해 인수 1, 2, 3을 순차적으로 전달하여 6이 됩니다.
JavaScript의 화살표 함수는 카레 함수를 생성하는 간결한 방법을 제공합니다.
const curryAddArrow = a => b => c => a + b + c; console.log(curryAddArrow(1)(2)(3)); // Output: 6
설명: curryAddArrow 함수는 인수 a를 취하고 b를 취하는 또 다른 화살표 함수를 반환하는 화살표 함수이며, 이는 c를 취하는 또 다른 화살표 함수를 반환합니다. 마지막 화살표 함수는 a, b, c의 합을 반환합니다. curryAddArrow(1)(2)(3)을 호출하면 중첩된 화살표 함수를 통해 인수 1, 2, 3을 순차적으로 전달하여 6이 됩니다.
커링의 일반적인 사용 사례는 구성 기능입니다. 예를 들어, 로깅 수준과 메시지 형식을 별도로 구성하려는 로깅 유틸리티를 생성한다고 가정해 보십시오.
function logger(level) { return function (message) { console.log(`[${level}] ${message}`); }; } const infoLogger = logger('INFO'); const errorLogger = logger('ERROR'); infoLogger('This is an info message'); errorLogger('This is an error message');
커링을 사용하여 문자열 포맷터를 생성할 수 있는 실제 예를 고려해 보겠습니다. 이 포맷터를 사용하면 접두사와 접미사를 별도로 구성할 수 있습니다.
function formatter(prefix) { return function (suffix) { return function (str) { return `${prefix}${str}${suffix}`; }; }; } const htmlFormatter = formatter('<b>')('</b>'); console.log(htmlFormatter('Hello')); // <b>Hello</b> const parensFormatter = formatter('(')(')'); console.log(parensFormatter('123')); // (123)
Currying은 Lodash 및 Ramda와 같은 최신 JavaScript 라이브러리에서 일반적으로 사용됩니다. 예를 들어 Lodash에서는 _.curry 메소드를 사용하여 카레 함수를 쉽게 만들 수 있습니다.
const _ = require('lodash'); function multiply(a, b, c) { return a * b * c; } const curriedMultiply = _.curry(multiply); console.log(curriedMultiply(2)(3)(4)); // 24 console.log(curriedMultiply(2, 3)(4)); // 24
아래에서 n개의 인수를 추가하는 재귀 함수를 사용하여 커링하는 예를 살펴보겠습니다. 우리는 커링을 사용하여 한 번에 하나씩 원하는 수의 인수를 허용하고 함께 추가할 수 있는 함수를 생성할 것입니다.
function curryAddition(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn(...args); } else { return function(...nextArgs) { return curried(...args, ...nextArgs); }; } }; } // This function sums an array of numbers function add(...nums) { return nums.reduce((acc, num) => acc + num, 0); } // Creating a curried version of the addition function const curriedAdd = curryAddition(add); // Function to handle n arguments function curriedAddN(...initialArgs) { function adder(...args) { if (args.length === 0) { return curriedAdd(...initialArgs); } initialArgs.push(...args); return adder; } return adder; } // Examples const addFiveNumbers = curriedAddN(); console.log(addFiveNumbers(1)(2)(3)(4)(5)()); // 15 const addThreeNumbers = curriedAddN(1)(2)(3); console.log(addThreeNumbers()); // 6 const addNumbersInSteps = curriedAddN(1, 2)(3)(4, 5); console.log(addNumbersInSteps()); // 15
Currying은 코드의 모듈성과 재사용성을 향상시키는 함수형 프로그래밍의 강력한 기술입니다. 함수를 단일 인수 함수의 체인으로 변환함으로써 커링은 부분 적용과 유연한 함수 구성을 허용합니다. 구성, 문자열 형식화 또는 복잡한 계산 등 어떤 경우에도 커링을 사용하면 코드를 더욱 표현력 있고 적응력 있게 만들 수 있습니다.
위 내용은 자바스크립트 커링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!