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
rangeL = function* (num) {
let i = -1
while (++i < num) {
yield i
}
}
let list = rangeL(4)
log(list)
log(reduce(add, list))
<aside> 💡 우선 기존 range 함수를 제너레이터로 만들어준다 결과는 아래와 같다
</aside>
<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))
<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))
<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))
<aside> 💡 !! 느긋한 range에서는 제너레이터가 동작하지 않는 것을 확인 이는 무엇을 뜻할까?
</aside>