inflearn logo
강의

Course

Instructor

Functional Programming and JavaScript ES6+

L.map

function* 없이 지연성이 있는 함수를 만들 수 있을까요?

356

ssisksl770140

7 asked

0

주어지는 generator기능이 없이, generator와 동일한 역할을 수행하는 함수를 코드로 보고 싶습니다.

javascript 함수형-프로그래밍

Answer 2

5

mduniv

 
 

네. 가능합니다 :)

아래 코드는 제너레이터를 사용하지 않고 이터레이터를 생성하도록 하여 구현한 지연 평가입니다.

이해를 돕기 위해 ES5 문법으로만 작성했습니다.

감사합니다.

 

function fromArray(arr) {
var i = -1, length = arr.length;
return {
next: function() {
return ++i >= length ?
{ done: true } :
{ value: arr[i], done: false };
}
}
}
function map(f, iter) {
return {
next: function() {
var cur = iter.next();
return cur.done ?
{ done: true } :
{ value: f(cur.value), done: false };
}
}
}
var iter = map(a => a + 10, fromArray([1, 2, 3, 4]));
console.log(iter.next()); // { value: 11, done: false }
console.log(iter.next()); // { value: 12, done: false }
console.log(iter.next()); // { value: 13, done: false }
console.log(iter.next()); // { value: 14, done: false }
console.log(iter.next()); // { done: true }

function filter(f, iter) {
return {
next: function() {
var cur = iter.next();
return cur.done ?
{ done: true } :
f(cur.value) ?
{ value: cur.value, done: false } :
this.next();
}
}
}

var iter2 = filter(a => a % 2, fromArray([1, 2, 3]));
console.log(iter2.next()); // { value: 1, done: false }
console.log(iter2.next()); // { value: 3, done: false }
console.log(iter2.next()); // { done: true }

function take(l, iter) {
var i = -1, res = [];
while (++i < l) {
var cur = iter.next();
if (cur.done) break;
res.push(cur.value);
}
return res;
}

console.log(
take(2,
filter(a => a % 2,
map(a => a + 10,
fromArray([1, 2, 3, 4, 5])))));
// [11, 13] map의 next에는 3번만.

0

ssisksl770140

와... 감사합니다!

프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다

1

111

1

함수형 프로그래밍 심화 강의 자료 추천

0

72

2

함수형 자바스크립트 프로그래밍 책

0

52

1

filter가 아무것도 걸러내지 못하는 경우

0

113

1

take 함수의 성능적면에서의 이점

1

463

1

pipe함수

1

531

1

Identity 함수

0

450

1

함수형 프로그래밍이란

0

831

1

reduce 예제 코드 제안!

0

404

1

fxts를 배워보려고 합니다.

1

537

1

flatMap 관련 질문드립니다~

1

444

1

다용성이 높은 L.flatMap

0

357

1

변수에 재 할당 금지~

0

540

1

DevTools라고 옆에 결과 확인하는거 어떻게 하나요?

0

483

2

소요시간에 관해서 질문드립니다

1

457

1

join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!

0

465

2

reduce에 L.range를 사용할 때

0

526

2

[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유

3

738

2

제가 이해한 C.Reduce와 Reduce의 동작 차이 정리

2

787

3

go, pipe 함수 관련하여 질문 드립니다.

1

498

1

안녕하세요 강사님!

0

380

2

fxts에 go가 없는 이유?

0

840

1

비동기 관련 질문입니다!

0

461

1

질문 있습니다.

0

515

1