[TIL๐Ÿ”ฅ]Day8(8/11)

๊น€๋‹ค์Šฌยท2021๋…„ 8์›” 11์ผ
0

Today I Learned

๋ชฉ๋ก ๋ณด๊ธฐ
8/22
post-thumbnail

Introduction

์˜ค๋Š˜์€ ์ง€์—ฐ์„ฑ์— ํ๋‹น ๋น ์ ธ๋“  ๋‚ ์ด๋‹ค...
๋ญ”๊ฐ€ ์ดํ•ด๋ ๋“ฏ ์•ˆ๋ ๋“ฏ ๊ทธ๋Ÿฐ ๊ธฐ๋ถ„์ด๋‹ค...๊ทธ๋ž˜์„œ ๋ญ”๊ฐ€ ๋” ๋‹ต๋‹ตํ•˜๋‹ค...๊ทธ๋ž˜๋„ ์žฌ๋ฏธ๋Š” ์žˆ๋‹ค!!
๊ณ„์†ํ•ด์„œ ๊ณผ์ œ๋ฅผ ์‹œ๋„ํ•ด๋ณด๊ณ ์žˆ์œผ๋‚˜ ์—ญ์‹œ๋‚˜ ์–ด๋ ต๋‹ค ๐Ÿ˜ข
๊ทธ๋ž˜๋„ ์˜ค๋Š˜ ์Šคํ„ฐ๋”” ์ค€๋น„๋„ ๋๋‚ด๊ณ  ๊ฐ•์˜๋„ ์™„๊ฐ•ํ–ˆ๋‹ค.
์•„๋งˆ ์ฃผ๋ง์— ๋ณต์Šต์„ ์—ด์‹ฌํžˆ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.


์˜ค๋Š˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ๊ฒƒ

์ง€์—ฐ ํ‰๊ฐ€์˜ ๊ฐœ๋…์€ ์ดํ•ด๊ฐ€ ๊ฐ€๋Š”๋ฐ ๋ง‰์ƒ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋‹ˆ ์–ด๋ ต๋‹ค.

์ดํ„ฐ๋Ÿฌ๋ธ” ์ค‘์‹ฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ์ง€์—ฐ ํ‰๊ฐ€(Lazy Evaluation)
1. range์™€ L.range
2. map๊ณผ L.map
3. filter์™€ L.filter
4. flatten๊ณผ L.flatten
5. flatMap๊ณผ L.flatMap


์˜ค๋Š˜์€ range์™€ L.range์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ๋ณต์Šตํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

๐Ÿข range์™€ L.range ๋น„๊ต๋ฅผ ํ†ตํ•œ ์ง€์—ฐ ํ‰๊ฐ€

์ง€์—ฐ ํ‰๊ฐ€ (Lazy Evaluation)

  • ์ œ๋•Œ ๊ณ„์‚ฐ๋ฒ•, ๋Š๊ธ‹ํ•œ ๊ณ„์‚ฐ๋ฒ•์ด๋ผ ๋ถˆ๋ฆผ
  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ/์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„
  • ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰

range

  • ์ˆซ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›๊ณ  ๊ทธ ์ˆซ์ž์˜ ํฌ๊ธฐ๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
// ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•œ range ๊ตฌํ˜„
    const range = l => {
        let i = -1;
        let res = [];
        while(++i < l) {
            res.push(i)
        }
        return res;
    };

    console.log(range(5)); // [0, 1, 2, 3, 4]

    let list = range(4);
		// ์ด๋ฏธ list๋ผ๋Š” ๊ฐ’์ด ๋ฐฐ์—ด์ธ ์ƒํƒœ, ์™„์ „ํžˆ ํ‰๊ฐ€ ์™„๋ฃŒ
    console.log(list); // [0, 1, 2, 3]

L.range

// ๋Š๊ธ‹ํ•œ L.range ๊ตฌํ˜„
    const L = {};
    L.range = function *(l){
        let i = -1;
        while(++i < l) {
            yield i;
        }
    };

    let list = L.range(4);
    console.log(list); // ์•„์ง ํ‰๊ฐ€๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ
    console.log(list.next()) // {value: 0, done: false}
    console.log(list.next()) // {value: 1, done: false}
	console.log(list.next()) // {value: 0, done: false}

์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

L.range๋Š” ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋กœ ์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
๋”ฐ๋ผ์„œ list๋ฅผ ์ถœ๋ ฅํ–ˆ์„ ๋•Œ, list๋Š” ์•„์ง ํ‰๊ฐ€๋˜์ง€์•Š์€ ์ƒํƒœ๋กœ next()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹œ์ ์— ํ‰๊ฐ€๋˜์–ด ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

range์™€ L.range ๋น„๊ต

range
- range(4)๊ฐ€ ์‹คํ–‰๋œ ์‹œ์ ์—์„œ ์ด๋ฏธ [0, 1, 2, 3]์˜ ๋ฐฐ์—ด๋กœ ์™„์ „ํžˆ ํ‰๊ฐ€ ์™„๋ฃŒ

L.range
- L.range(4)๋กœ ์ƒ์„ฑ๋œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ next()๋กœ ์ˆœํšŒํ•  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๊ฐ’์ด ํ‰๊ฐ€ (์ง€์—ฐ ํ‰๊ฐ€)

range์™€ L.range ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ

// range์™€ L.range ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ
 function test(name, time, f) {
    console.time(name);
    while (time--) f();
    console.timeEnd(name);
}

test('range', 10, () => reduce(add, range(1000000)));
test('L.range', 10, () => reduce(add, L.range(1000000)));

ํฐ ์ฐจ์ด๋Š” ์•„๋‹ˆ์ง€๋งŒ, L.range๊ฐ€ ๋” ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Comment

์ง€์—ฐ ํ‰๊ฐ€์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๊ณ  ์ดํ•ดํ•ด๋ณด๋‹ˆ ๋˜๊ฒŒ ์‹ ๊ธฐํ•˜๋‹ค.
๊ทธ์ € ๋ฐฐ์—ด์˜ ๋ฉ”์„œ๋“œ๋กœ ํ•จ์ˆ˜๋“ค์„ ์“ฐ๊ธฐ๋งŒ ํ–ˆ์ง€ ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ ‘๊ทผํ•ด๋ณด๋‹ˆ ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์„ ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๊ณผ์ œ์—๋„ ์ž˜ ์ ์šฉํ•ด์„œ ๋งˆ์Šคํ„ฐํ•˜๋„๋ก,,, ๋…ธ๋ ฅํ•ด๋ด์•ผ๊ฒ ๋‹ค ~ ๐Ÿ’ช

profile
์ธ์ƒ์€ ์šฉ๊ธฐ์˜ ์–‘์— ๋”ฐ๋ผ ์ค„์–ด๋“ค๊ฑฐ๋‚˜, ๋Š˜์–ด๋‚œ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€