작곡 또는 파이프

4081 단어

소개



함수형 프로그래밍은 종종 파이프 및 작성 함수를 사용합니다. 그것들은 고차 함수입니다. 고차 함수는 함수를 인수로 취하거나 함수 또는 둘 다를 반환하는 모든 함수입니다. 우리는 compose 및 pipe 함수, 빌드 방식 및 작동 방식에 대한 간단한 설명을 살펴보겠습니다.


구성하다

함수에서 compose가 호출되면 새 함수를 제공합니다. 예를 들어

const dreamBig = (db) => { return console.log('hello' + db / 8) }
const dreamSmall = (ds) => { return console.log('hello' + ds + 6) };
const dreamLittle = (dl) => { return console.log('hello' + dl * 6); }

const result = dreamBig(dreamSmall(dreamLittle(4)));
console.log(result);


결과 변수는 함수 구성입니다. dreamBig이 먼저 실행된 다음 dreamSmall이 실행되고 마지막으로 dreamLittle이 실행됩니다. 그것들은 중첩된 함수이며 오른쪽에서 왼쪽으로 실행됩니다.
작성 함수는 오른쪽에서 왼쪽으로 실행되는 중첩 함수입니다.
위의 예제에서 중첩된 함수 호출에서 볼 수 있듯이 작성 순서를 오른쪽에서 왼쪽으로 가져오려면 reduceRight() 메서드가 필요합니다.

const compose = (...ftn) => val => ftn.reduceRight((prev, fn) => fn(prev), val);


reduce 함수는 값 목록을 가져와서 각 값에 함수를 적용하여 단일 결과를 누적합니다.
방법은 커링 방법을 사용합니다. 함수가 즉시 호출되거나 호출됩니다. 오른쪽에서 시작하여 왼쪽에서 끝납니다.

const composeResult = compose(dreamBig, dreamSmall, dreamLittle)(8)
console.log(composeResult);


파이프



작성에서처럼 오른쪽에서 왼쪽으로 읽는 것을 좋아하지 않는 사람들을 위해 파이프는 본질적으로 작성 순서를 왼쪽에서 오른쪽으로 변경합니다. 작성처럼 작동하지만 reduceLeft()를 사용합니다.
대신 방법.

const pipe = (...ftn) => val => ftn.reduce((prev, fn) => fn(prev), val);
const pipeResult = pipe(dreamLittle, dreamSmall, dreamBig)(8)
console.log(pipeResult);


파이프를 사용하든 작성을 사용하든 함수를 별도의 줄에 표시하는 경우가 많습니다.

const composeResult2 = compose(
  dreamBig,
  dreamSmall,
  dreamLittle
)(8);



우리가 살펴본 예제는 포인터가 없는 스타일을 사용하고 단항 함수를 사용하면 각 함수 사이에 전달된 매개변수를 볼 수 없으며 작성의 끝에서 전달된 매개변수만 볼 수 있습니다.
함수를 즉시 호출할 때 파이프 함수.

작성 및 파이프 자세히 알아보기



매개변수가 두 개 이상이거나 단항 함수로 작업하지 않는 경우의 예를 살펴보겠습니다.

const divideBy = (divisor, num) => num / divisor;
//this function requires two parameters, the divisor and the num and it implicitly returns the result
const pipeResult3 = pipe(
  dreamBig,
  dreamSmall,
  dreamLittle,
  x => divideBy(7, x)
)(8);
console.log(pipeResult3);


파이프 메서드를 사용하여 DivideBy를 제공하는 방법을 살펴보십시오. 각 함수에서 얻은 모든 결과는 x에 전달됩니다.
그런 다음 익명 함수를 사용하고 DivideBy를 호출하고 숫자를 제공하고 x가 함수에 들어갑니다. 파이프 또는 구성 함수에서 여러 매개 변수가 있는 함수를 줄이는 방법입니다.
compose 또는 method 파이프에서 숫자를 이미 하드 코딩한 경우 나누기 함수를 커리하여 단항 함수를 얻을 수 있습니까?

const multiplyBy = (multiplier) => (num) => num * multiplier;
const multiplyBy2 = multiplyBy(2); //partially applied unary function


여기 우리가 할 수 있는 일이 있습니다

const pipeResult4 = pipe(
  dreamBig,
  dreamSmall,
  dreamLittle,
  multiplyBy2
)(8);
console.log(pipeResult3);
console.log(pipeResult4);


여전히 다른 단항 함수처럼 작동합니다. 다른 예를 살펴보자.

const bahrain = "bahrain is a ccountry situated in the eastern part of arabia precisely the middle east"


여기서 우리는 단락에 있는 단어를 계산할 것입니다. 몇 가지 기능을 정의하자

const spaceSPlit = (str: string) => str.split(' ');
const number = (arr: string | any[]) => arr.length;


spaceSplit 메서드는 단락의 각 공백을 찾고 함수 번호는 문자열을 분할한 후 단어 수를 계산합니다.

const howMany = pipe(
  spaceSPlit,
  number
);


파이프 함수를 만들어 문자열에 적용하면 먼저 spaceSplit 함수를 호출한 다음 number 함수를 호출합니다. 함수를 즉시 호출할 필요는 없지만 계속해서 함수를 기록할 수 있습니다.

console.log(howMany(bahrain));


따라서 작성과 파이프의 주요 차이점은 실행 순서입니다.

좋은 웹페이지 즐겨찾기