ES6+ Basic3
์ธํ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ JavaScript ES6+ / ์ ์ธ๋
range
const range = l => {
let i = -1;
let res = [];
while (++i < l) {
res.push(i);
}
return res;
};
// range๊ฐ ๋ชจ๋ ๋ํ๊ธฐ
var list = range(4);
log(list);
log(reduce(add, list));
range๋ฅผ ์คํํ ์ฆ์ ๋ฐฐ์ด๋ก ํ๊ฐ๊ฐ ๋จ(๊ฐ์ด ๋ง๋ค์ด์ง)
๋๊ธํ L.range
const L = {}
L.range = function *(l) {
let i = -1;
while (++i < l) {
yield i;
}
};
// range๊ฐ ๋ชจ๋ ๋ํ๊ธฐ
var list = L.range(4);
log(list); // ์ดํฐ๋ ์ดํฐ
log(reduce(add, list));
์ดํฐ๋ ์ดํฐ์ ๋ด๋ถ๋ฅผ ์ค์ ๋ก ์ํํ ๋ ๋ง๋ค ๊ฐ์ด ํ๋์ฉ ํ๊ฐ๊ฐ ๋จ(ํจ์๋ด๋ถ์์๋ ํ๊ฐX, nextํ ๋ ํ๊ฐ๋จ)
๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ ํ๋์ฉ ๊ฐ์ ๊บผ๋ด๊ธฐ๋ง ํจ
์กฐ๊ธ ๋ ํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์(์ง์ฐ์ฑ)
take
const take = (l, iter) => {
let res = [];
for (const a of iter) {
res.push(a);
if (res.length == l) return res;
}
return res;
}
// ๋ง์ ๊ฐ์ ๋ฐ์์ ์๋ผ์ฃผ๋ ํจ์
log(take(5, range(10000)));
// ๋นํจ์จ์
log(take(5, L.range(10000)));
// ํจ์จ์
์ง์ฐ์ฑ์ ์ฐ์ฐ์ ํ์ง ์๊ณ ์๋ค๊ฐ take๋ reduce๊ฐ์ ํจ์๋ฅผ ๋ง๋ ๋ ์ฐ์ฐ์ ์ฒ์ํ๋ ๊ธฐ๋ฒ
์ดํฐ๋ฌ๋ธ(๋ฆฌ์คํธ) ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ์์์ ์ง์ฐ ํ๊ฐ Lazy Evaluation
์ ๋ ๊ณ์ฐ๋ฒ(์๋ฆฌํ ๊ณ์ฐ๋ฒ)
๋๊ธํ ๊ณ์ฐ๋ฒ
์ ๋๋ ์ดํฐ/์ดํฐ๋ ์ดํฐ ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ
L.map
L.map = function *(f, iter) {
for(const a of iter) yield f(a);
};
// next๋ฅผ ํตํด ํ๊ฐํ๋ ๊ฐ๋ง ์ป์ด์ฌ ์ ์์
// L.map ์์ฒด๋ ๋ฐฐ์ด์ ๋ง๋ค์ง ์์
ํ๊ฐ๋ฅผ ๋ฏธ๋ฃจ๋ ์ฑ์ง์ ๊ฐ์ง๊ณ ํ๊ฐ์์๋ฅผ ๋ฌ๋ฆฌ ์กฐ์ํ ์ ์๋ ์ค๋น๊ฐ ๋์ด์๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ ์ ๋๋ ์ดํฐ ํจ์
L.filter
L.filter = function *(f, iter) {
for(const a of iter) if (f(a)) yield a;
};
๋ง์ฐฌ๊ฐ์ง๋ก ํจ์๋ฅผ ์ํํ๋ ๋์์๋ ํ๊ฐ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์
range, map, filter, take, reduce ์ค์ฒฉ ์ฌ์ฉ
go(range(10),
map(n => n + 10),
filter(n => n % 2),
take(2),
log);
์๋ถํฐ ์์๋๋ก ํ๊ฐํ๋ฉด์ ๋ด๋ ค์ด
L.range, L.map, L.filter, take, reduce ์ค์ฒฉ ์ฌ์ฉ
go(L.range(10),
L.map(n => n + 10),
L.filter(n => n % 2),
take(2),
log);
์๋์ ์๋ก ๋ค์ ์์์ ์๋๋ก ์ธ๋ก๋ก ํ๊ฐ๋จ
์ต์ข ์ ์ผ๋ก takeํ ์๋งํผ๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ range์ ์๊ฐ ์๋ฌด๋ฆฌ ๋ง์๋ ์๊ฐ์ ๋๊ฐ์
map, filter ๊ณ์ด์ ํจ์๋ค์ด ๊ฐ์ง๋ ๊ฒฐํฉ ๋ฒ์น
์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ด๋ ์ง
์ฌ์ฉํ๋ ๋ณด์กฐ ํจ์๊ฐ ์์ ํจ์๋ผ๋ฉด ๋ฌด์์ด๋ ์ง
์๋์ ๊ฐ์ด ๊ฒฐํฉํ๋ค๋ฉด ๋ ๋ค ๊ฒฐ๊ณผ๊ฐ ๊ฐ์
ex) [[mapping, mapping], [filtering, filtering], [mapping, mapping]] == [[mapping, filtering, mapping], [mapping, filtering, mapping]]
ES6์ ๊ธฐ๋ณธ ๊ท์ฝ์ ํตํด ๊ตฌํํ๋ ์ง์ฐ ํ๊ฐ์ ์ฅ์
์๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ํจ์์ฌ๋ ๊ธฐ๋ณธ ๊ท์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํจ์ผ๋ก ์์ ํ ๋ฐฉ์์ผ๋ก ํฉ์ฑํ ์ ์์
Last updated