> 웹 프론트엔드 > JS 튜토리얼 > 자바스크립트 커링

자바스크립트 커링

王林
풀어 주다: 2024-07-18 02:38:20
원래의
742명이 탐색했습니다.

JavaScript Currying

커링은 여러 인수가 있는 함수를 각각 단일 인수를 사용하는 일련의 함수로 변환하는 함수형 프로그래밍의 강력한 개념입니다. 이 기술을 사용하면 더 모듈화되고 재사용 가능한 코드가 가능해집니다. JavaScript에서는 커링을 다양한 방식으로 구현할 수 있습니다. 이 블로그에서는 카레링을 살펴보고 예제를 제공하며 n 인수 카레링을 달성하기 위한 다양한 방법에 대해 논의합니다.

커링이란 무엇입니까?

커링은 여러 인수를 취하는 함수를 각각 단일 인수를 취하는 일련의 함수로 변환하는 프로세스입니다. 예를 들어 함수 f(a, b, c)는 f(a)(b)(c)로 변환될 수 있습니다.

왜 커링을 사용하는가?

  • 부분 적용: 커링을 사용하면 함수의 일부 인수를 수정하고 새 함수를 만들 수 있습니다.
  • 고차 함수: 다른 함수를 인수로 사용하거나 반환하는 고차 함수의 사용을 용이하게 합니다.
  • 코드 재사용성: 카레 함수의 재사용성과 구성성이 더욱 높아졌습니다.
  • 함수적 구성: Currying을 사용하면 더 나은 기능적 구성이 가능합니다. 즉, 더 간단한 기능을 결합하여 복잡한 기능을 구축하여 코드를 더 깔끔하고 유지 관리하기 쉽게 만듭니다.

간단한 커링 예제

카링의 작동 원리를 이해하기 위해 기본적인 예부터 시작해 보겠습니다.

커리되지 않은 기능

다음은 세 개의 숫자를 더하는 간단한 함수입니다.

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이 됩니다.


사용 사례

1. 구성 기능

커링의 일반적인 사용 사례는 구성 기능입니다. 예를 들어, 로깅 수준과 메시지 형식을 별도로 구성하려는 로깅 유틸리티를 생성한다고 가정해 보십시오.

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');

로그인 후 복사

2. 문자열 포맷터

커링을 사용하여 문자열 포맷터를 생성할 수 있는 실제 예를 고려해 보겠습니다. 이 포맷터를 사용하면 접두사와 접미사를 별도로 구성할 수 있습니다.

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)

로그인 후 복사

최신 JavaScript 라이브러리의 커링

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개의 인수를 사용한 커링

아래에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿