JavaScript Currying 4 - 추적

11009 단어
포인트 프리 스타일을 사용한 함수 구성은 매우 간결하고 읽기 쉬운 코드를 생성합니다.

const trace = (label) => (value) => {
  console.log(`${label}: ${value}`);
  return value;
};

const compose = (...functions) => (x) =>
  functions.reduceRight((y, f) => f(y), x);

const g = (n) => n + 1;
const f = (n) => n * 2;

const h = compose(
  trace('after f'), // 'after f: 42'
  f,
  trace('after g'), // 'after g: 21'
  g
); // function application order is from bottom to top

h(20); // => 42


Compose는 환상적인 유틸리티일 수 있지만 코드를 읽는 더 편리한 방법은 위에서 아래로입니다.

const trace = (label) => (value) => {
  console.log(`${label}: ${value}`);
  return value;
};

const g = (n) => n + 1;
const f = (n) => n * 2;

const pipe = (...functions) => (x) => functions.reduce((y, f) => f(y), x);

// updated usage
const h = pipe(
  g,
  trace('after g'), // 'after g: 21'
  f,
  trace('after f') // 'after f: 42'
); // function application order is from top to bottom

h(20); // => 42


Currying은 특수 기능에 대한 유용한 추상화일 수 있습니다.

const map = (fn) => (mappable) => mappable.map(fn);
const double = (n) => n * 2;
const doubleAll = map(double);
doubleAll([1, 2, 3]); // => [2, 4, 6]

trace 함수가 커리링되지 않은 경우 다음과 같이 표시됩니다.

const g = (n) => n + 1;
const f = (n) => n * 2;

const pipe = (...functions) => (x) => functions.reduce((y, f) => f(y), x);

const trace = (label, value) => {
  console.log(`${label}: ${value}`);
  return value;
};

const h = pipe(
  g,
  (x) => trace('after g', x), // 'after g: 21'
  f,
  (x) => trace('after f', x) // 'after f: 42'
);

h(20); // => 42


데이터 마지막 ​​스타일은 함수가 먼저 전문화 매개변수를 취하고 나중에 데이터를 가져와야 함을 의미합니다.

부분적으로 적용된 함수에 적용된 인수를 고정 매개변수라고 합니다.

포인트 프리 스타일은 인수를 참조하지 않고 함수를 정의하는 방법입니다. 포인트 프리 함수는 커리 함수와 같은 함수를 반환하는 함수를 호출하여 생성됩니다.

좋은 웹페이지 즐겨찾기