JS - 지연평가 2


JS - 지연평가 와 이어지는 글입니다.
핵심적인 내용보다는 다른 기능을 가진 함수들만 추가되었습니다.

지연성

지연 평가를 함으로써 얻을 수 있는 장점은 지난 글에 적어두었고, 그 외 함수들과 자잘한 개념에 대해 메모하려하고 한다.👻

앞선 글과 이번에 예제에 사용되는 함수들의 종류는 크게 다음과 같다.

  • reduce, take, find: 결과를 만드는 함수.
  • map, filter, flatten: 원소들에게 함수들을 합성하는 함수

간단하게 reduce 는 결과를 최종적으로 도출하기 위해서 사용하고 map 같은 경우는 중간에 원하는 값을 도출하기 위해 데이터를 가공하는 중간 단계에서 사용되는 느낌이라고 볼 수 있겠다. 물론 map 으로 원하는 값을 바로 얻을 수도 있겠지만 현 예제에서 이런 느낌이다.

아직까지 개인적 느낌으로는 이미 만들어진 블록을 가지고 깔끔하게 원하는 형태를 만드는 그런 느낌이다.

L.entries = function *(obj) {
  for (const key in obj) {
    yield [key, obj[key]];
  }
};

const join = curry((sep = ",", iter) => {
  reduce((acc, cur) => `${acc}${sep}${cur}`, iter);
});

const queryStr = pipe(
  L.entries,
  L.map(([key, value]) => `${key}=${value}`),
  join("&")
);

const find = curry((f, iter) => go{
  iter,
  L.filter(f),
  take(1),
  ([a]) => a
});

console.log(
  queryStr({
    name: "aredra",
    age: 9999,
  })
);

const takeAll = take(Number.POSITIVE_INFINITY);
const isIterable = a => a && a[Symbol.iterator];

L.flatten = function *f(iter) {
  for (const x of iter) {
    if (isIterable(x)) {
      yield *f(x) ;
    } else {
      yield x;
    }
  }
};

const flatten = pipe(
  L.flatten,
  takeAll
);

참조


개인이 참고하고자 작성한 글이며, 잘못된 정보가 있을 수 있습니다. 잘못된 정보는 메일로 보내주시면 감사하겠습니다. 🙏