커링(Currying)

김형진·2024년 8월 12일
post-thumbnail

f(a,b,c)처럼 단일 호출로 처리하는 함수를 f(a)(b)c)와 같이 각각의 인수가 호출 가능한 프로세스로

호출된 후 병합될 수 있게 변환하는 것

const sum = (x, y) => x + y;

const curridSum = (x) => (y) => x + y;

console.log("sum()", sum(10, 20));//30

//Curried function
console.log("curridSum()", curridSum(10)(20));//30

실습 1(화살표 함수)

const makeFood = (food1) => {
  return (food2) => {
    return (food3) => {
      return `${food1} ${food2} ${food3}`;
    };
  };
};

const burger = makeFood("Bread")("Ham")("Tomato");
console.log(burger);
//Bread Ham Tomato

//clean code
const cleanmakeFood = (food1) => (food2) => (food3) =>
  `${food1} ${food2} ${food3}`;

const cupNoodle = cleanmakeFood("water")("noodle")("Sauce");
console.log(cupNoodle);
//water noodel Sauce

실습 2(함수)

function log(date, importance, message) {
  console.log(
    `[${date.getHours()}:${date.getMinutes()}]: [${importance}] ${message}`
  );
}

log(new Date(), "DEBUG", "some bug");
//[16:34]: [DEBUG] some bug

//curring function
function curry(f) {
  return function (a) {
    return function (b) {
      return function (c) {
        return f(a, b, c);
      };
    };
  };
}

const curriedLog = curry(log);
curriedLog(new Date())("DEBUG")("some bug");
///[16:34]: [DEBUG] some bug

0개의 댓글