함수형 프로그래밍과 JavaScript ES6+ (6) - go

Lee Tae-Sung·2023년 1월 28일
0

JS

목록 보기
56/56

인프런 유인동님의 '함수형 프로그래밍과 JavaScript ES6+' 강의를 들으며 정리 및 공부한 내용입니다.

go([0,
  a => a + 1,
  a => a + 10,
  a => a + 100,
  log);

=> 먼저 해당 함수를 만들어보자..
=> 가장 먼저 인자의 갯수가 정해져있지 않다.
=> 앞에서 배운 next()를 활용해야하는 것 같음

=> 들어오는 인자가 함수. 이건 문제될거 없을듯

=> 결국 인자들을 iterable하게 묶어주는 수단이 필요할거 같은데
=> 가장 큰 문제는 인자의 갯수가 정해져 있지 않은 것과 인자를 하나로 묶거나 그런게 없는점
=> 만약 배열이라면 destructuring으로 가져올수 있을 것 같은데 ..

=> 인자도 destructuring로 가져올 수 있음
=> iterator protocol을 사용하지 않고 일단 typeof로 하드코딩. ..

const go = (...iter) => {
  let res;
  for (let b of iter) {
    if (typeof b === "function") {
      res = b(res);
    } else {
      res = b;
    }
  }
};

go(
  0,
  (a) => a + 1,
  (a) => a + 10,
  console.log
);
const reduce = (f, acc, iter) => {
  if (!iter) {
    iter = acc[Symbol.iterator]();
    acc = iter.next().value;
  }
  for (const a of iter) {
    acc = f(acc, a);
  }

  return acc;
};

const go = (...args) => reduce((a, f) => f(a), args);

go(
  0,
  (a) => a + 1,
  (a) => a + 10,
  console.log
);

=> 공부하면서 만들었던 reduce를 활용하면 간단하게 보조함수를 적용할 수 있다.
=> 여기서 굉장히 헷갈린게 reduce 함수 안에 여섯번째 코드 라인인

acc = f(acc, a)

이 코드에서 f 의 정체를 모르겠었다.
그리고 고민 중에 강의 내에 나와 같은 고민을 한 분의 질문을 찾았고
답을 찾을 수 있었는데 기존에 array의 내장 함수 reduce의 동작을 생각해서 헷갈리는거였다.

이 reduce는 위에 우리가 직접 만든 함수로 첫번째 인자로 함수, 두번째 인자로 등등이 들어간다.

그러므로 reduce안의 (a, f) => f(a)는 인자로 들어가는 함수일 뿐.

profile
긍정적인 에너지를 가진 개발자, 이태성입니다.

0개의 댓글