1. range와 느긋한 range

1 ) range

const add = (a, b) => a + b
  const range = (num) => {
    let i = -1
    let res = []
    while (++i < num) { // i 뒤에 ++를 붙이면 판단시엔 적용이 안된 상태로 넘어가니 주의하자
      res.push(i)
    }
    return res
  }

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

  log(reduce(add)(range(3))) // 6

2 ) 느긋한 range

rangeL = function* (num) {
    let i = -1
    while (++i < num) {
      yield i
    }
  }

  let list = rangeL(4)
  log(list)
  log(reduce(add, list))

<aside> 💡 우선 기존 range 함수를 제너레이터로 만들어준다 결과는 아래와 같다

</aside>

스크린샷 2022-09-27 오전 11.10.52.png

<aside> 💡 결과는 같지만 그 과정에 있어서 기존 range 함수를 구현하는 방법과 차이가 생기는데 이를 알아보자!

</aside>

const add = (a, b) => a + b
  const range = (num) => {
    let i = -1
    let res = []
    while (++i < num) {
      res.push(i)
    }
    return res
  }

  let list1 = range(4)
  log(list1)
  log(reduce(add)(list1))
</script>

<script>
  rangeL = function* (num) {
    let i = -1
    while (++i < num) {
      yield i
    }
  }

  let list2 = rangeL(4)
  log(list2)
  log(reduce(add, list2))

스크린샷 2022-09-27 오전 11.18.12.png

<aside> 💡 위의 결과를 보면 기존의 range는 배열을 생성하고 결과값을 만들고 느긋한 range는 배열을 생성하지 않고 제너레이터를 만든 뒤 결과값을 만든다 여기서 생기는 차이점은 무엇일까?

</aside>

const add = (a, b) => a + b
  const range = (num) => {
    log('range 시작')
    let i = -1
    let res = []
    while (++i < num) {
      console.log(`range i: ${i}`)
      res.push(i)
    }
    return res
  }

  let list1 = range(4)
  log(list1)
  log(reduce(add)(list1))

  rangeL = function* (num) {
    log('느긋한 range 시작')
    let i = -1
    while (++i < num) {
      console.log(`느긋한 range i: ${i}`)
      yield i
    }
  }

  let list2 = rangeL(4)
  log(list2)
  log(reduce(add, list2))

스크린샷 2022-09-27 오전 11.27.32.png

<aside> 💡 위와 같이 동일하게 console.log가 찍히는 것을 볼 수 있다 각각의 range를 정의까지만 한다면 어떤 차이가 있을까?

</aside>

const add = (a, b) => a + b
  const range = (num) => {
    log('range 시작')
    let i = -1
    let res = []
    while (++i < num) {
      console.log(`range i: ${i}`)
      res.push(i)
    }
    return res
  }

  let list1 = range(4)
  log(list1)
  //log(reduce(add)(list1))

  rangeL = function* (num) {
    log('느긋한 range 시작')
    let i = -1
    while (++i < num) {
      console.log(`느긋한 range i: ${i}`)
      yield i
    }
  }

  let list2 = rangeL(4)
  log(list2)
  //log(reduce(add, list2))

스크린샷 2022-09-27 오전 11.33.20.png

<aside> 💡 !! 느긋한 range에서는 제너레이터가 동작하지 않는 것을 확인 이는 무엇을 뜻할까?

</aside>