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
);
참조
개인이 참고하고자 작성한 글이며, 잘못된 정보가 있을 수 있습니다. 잘못된 정보는 메일로 보내주시면 감사하겠습니다. 🙏