>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 커링 마스터하기: 코드 재사용성과 유연성 향상

JavaScript의 커링 마스터하기: 코드 재사용성과 유연성 향상

DDD
DDD원래의
2024-12-24 05:28:18798검색

Mastering Currying in JavaScript: Enhance Code Reusability and Flexibility

JavaScript의 커링 이해

Currying은 JavaScript에서 사용되는 함수형 프로그래밍 기술로, 여러 인수를 취하는 함수를 각각 단일 인수를 취하는 일련의 함수로 변환합니다. 이를 통해 인수를 부분적으로 적용할 수 있어 함수 작업에 더욱 유연한 방법이 제공됩니다.

1. 커링이란 무엇인가요?

커링은 여러 인수를 취하는 함수를 각각 단일 인수를 취하는 일련의 함수로 변환하는 프로세스입니다. 첫 번째 함수는 첫 번째 인수를 취하고, 두 번째 인수를 취하는 새 함수를 반환하는 식으로 모든 인수가 제공될 때까지 계속됩니다.

커링의 예:

커링의 기본 예는 다음과 같습니다.

function add(a) {
  return function(b) {
    return a + b;
  };
}

const addFive = add(5); // The first function is called with 5
console.log(addFive(3)); // Output: 8 (5 + 3)

위의 예에서:

  • add는 하나의 인수 a를 취하고 두 번째 인수 b를 취하는 함수를 반환합니다.
  • add(5)를 호출하면 a가 5로 고정된 함수를 반환합니다. 이제 새 함수는 b를 가져와 5에 추가합니다.

2. 여러 인수를 이용한 커링

커링은 여러 인수를 사용하는 함수가 있고 이를 더 작고 재사용 가능한 조각으로 나누고 싶을 때 가장 유용합니다. 다음은 여러 인수를 사용한 커링의 예입니다.

여러 인수를 사용한 커링의 예:

function multiply(a) {
  return function(b) {
    return function(c) {
      return a * b * c;
    };
  };
}

const multiplyBy2 = multiply(2);  // First argument is fixed as 2
const multiplyBy2And3 = multiplyBy2(3); // Second argument is fixed as 3
console.log(multiplyBy2And3(4)); // Output: 24 (2 * 3 * 4)

이 경우:

  • 곱하기(2)는 b를 취하는 함수를 반환합니다.
  • 반환된 함수는 b를 취하고 c를 취하는 다른 함수를 반환합니다.
  • multiplyBy2And3(4)가 호출되면 2 * 3 * 4를 계산합니다.

3. 현재 예: 맞춤형 구현

여러 인수를 사용하고 해당 인수를 누적하는 함수를 반환하는 함수를 만들어 수동으로 커링을 구현할 수 있습니다.

맞춤형 커링 기능:

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    } else {
      return function(...newArgs) {
        return curried(...args, ...newArgs);
      };
    }
  };
}

// Example function
function sum(a, b, c) {
  return a + b + c;
}

const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // Output: 6

위의 예에서:

  • 어떤 기능이든 카레할 수 있는 커스텀 카레 기능을 만들었습니다.
  • sum(1, 2, 3)은 여러 호출로 분할됩니다: curriedSum(1)(2)(3).

4. 커링을 사용하는 이유는 무엇인가요?

Currying을 사용하면 재사용 가능하고 구성 가능한 함수를 더 많이 만들 수 있습니다. 일부 시나리오에서는 코드를 단순화하고 공통 인수를 공유하는 함수 작업을 더 쉽게 만들 수 있습니다.

커링의 장점:

  1. 부분 함수 적용: Currying을 사용하면 함수의 부분 적용이 가능합니다. 즉, 일부 인수를 수정하고 다른 인수는 나중에 제공하도록 남겨두어 특수 함수를 만들 수 있습니다.

  2. 함수 구성: 카레 함수를 결합하여 코드를 반복하지 않고도 더 복잡한 연산을 구축할 수 있습니다.

  3. 가독성 향상: 커링을 사용하면 함수에 필요한 인수가 무엇인지 명확해지고 코드가 더 깔끔하고 간결해집니다.

부분 함수 적용 예시:

function add(a) {
  return function(b) {
    return a + b;
  };
}

const addFive = add(5); // The first function is called with 5
console.log(addFive(3)); // Output: 8 (5 + 3)

여기서 MultiplyBy10은 첫 번째 인수가 10으로 고정된 특수 함수입니다. 이는 여러 곳에서 재사용할 수 있습니다.

5. 실제 예: API 요청을 통한 커링

공통 매개변수를 사용하여 일련의 API 요청을 한다고 가정해 보겠습니다. 커링을 사용하면 이 프로세스를 단순화할 수 있습니다.

function multiply(a) {
  return function(b) {
    return function(c) {
      return a * b * c;
    };
  };
}

const multiplyBy2 = multiply(2);  // First argument is fixed as 2
const multiplyBy2And3 = multiplyBy2(3); // Second argument is fixed as 3
console.log(multiplyBy2And3(4)); // Output: 24 (2 * 3 * 4)

6. 부분적용과 비교

커링이 함수를 일련의 단항 함수로 변환하는 반면, 부분 적용은 함수의 일부 인수를 수정하고 나머지 인수를 허용하는 새 함수를 반환하는 프로세스입니다. 커링은 부분 적용을 달성하는 한 가지 방법입니다.

부분 적용 예시:

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn(...args);
    } else {
      return function(...newArgs) {
        return curried(...args, ...newArgs);
      };
    }
  };
}

// Example function
function sum(a, b, c) {
  return a + b + c;
}

const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // Output: 6

여기서는 Bind()를 사용하여 Greeting 함수에 "Hello"를 부분적으로 적용했습니다.

결론

  • 커링은 한 번에 하나의 인수로 함수를 호출하여 모든 인수가 제공될 때까지 새 함수를 반환하는 기술입니다.
  • 부분적용, 함수합성, 코드 재사용성 및 가독성 향상에 유용합니다.
  • 커링은 주로 인수가 여러 개인 함수를 단순화하는 데 사용되지만 함수형 프로그래밍에서는 강력한 도구입니다.

안녕하세요. 저는 Abhay Singh Kathayat입니다!
저는 프론트엔드와 백엔드 기술 모두에 대한 전문 지식을 갖춘 풀스택 개발자입니다. 저는 효율적이고 확장 가능하며 사용자 친화적인 애플리케이션을 구축하기 위해 다양한 프로그래밍 언어와 프레임워크를 사용하여 작업합니다.
제 비즈니스 이메일(kaashshorts28@gmail.com)로 언제든지 연락주세요.

위 내용은 JavaScript의 커링 마스터하기: 코드 재사용성과 유연성 향상의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.