inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

함수형 프로그래밍과 JavaScript ES6+

강의 후반 변경된 map, filter,reduce 함수 질문

430

Hdougie

작성한 질문수 1

0

강의 초반에는 이터러블 인자를 굳이 이터레이터로 바꾸는 코드를 작성하지 않았는데

강의 중후반에는 좀 이터러블 인자를 이터레이터로 만들어주는 코드를 작성한 이유가 있을까요??

강의중 예시에는 iter에 들어오는 인자가 거의 다 well form이터레이터라

인자 자체가 이터러블이자 이터레이터라 굳이 코드 작성시 필요가 없어보였거든요..

javascript 함수형-프로그래밍

답변 6

1

MDU 유인동

뭔가 오해하고 계신거 같아 정리를 했으면 해요. 

우선 저는 이터러블 프로토콜에 대해서 정확히 알고 있고 이 강의 전체 예제에서 불필요하게 이터레이터로 만드는 코드를 작성한 적이 없습니다.

제가 작성한 '04. Map,filter,reduce/ 2 / lib / fx.js 의 reduce' 이곳에서는 아래와 같이 else 절이 없습니다.

https://github.com/indongyoo/functional-javascript-01/blob/master/04.%20map%2C%20filter%2C%20reduce/2/lib/fx.js

아무래도 제 생각에는 질문자님께서 질문자님의 강의노트에 이전에 코드를 자유롭게 작성해보시다가 else 절이 있게 작성을 해보시지 않으셨을까 생각이 되어요.

'07. 지연성 1,8. 지연성 2 / 4 / lb / jx.js 에 6번째 줄의 reduce' 이곳에서는 while을 사용하기 때문에 while 에서는 next()를 내부적으로 순회시켜주는게 아니라 직접해야하기 때문에 이터레이터로 만들어두어야만 하고 그래서 else 절에서 이터레이터로 만들고 있습니다.

https://github.com/indongyoo/functional-javascript-01/blob/master/07.%20%EC%A7%80%EC%97%B0%EC%84%B1%201%2C%208.%20%EC%A7%80%EC%97%B0%EC%84%B1%202/4/lib/fx.js

while을 사용하는 이유는 for...of 문을 사용할 경우 promise를 제어하기 위해 return 등으로 for...of 문을 종료하려하면 내부적으로 이터레이터를 종료하는 코드가 들어있기 때문에 while을 사용해서 풀어야하기 때문입니다. 연관 답변 링크를 첨부드립니다.

https://www.inflearn.com/questions/17067

강의들어주셔서 감사드리고 답변이 되셨길 바래요.

감사드립니다.

1

MDU 유인동

안녕하세요 :) 

질문자님이 보여주신것과 동일하게 코드를 작성한적이 없어요. 

while을 하면서 직접 next를 하기 위해서 작성한거에요.  while을 하기 위해서는 next를 쓸 수 밖에 없는 것이죠. 그러기 위해선 이터레이터라 되어야만하구요. 

그래야했던 이유는 for...of 에 제너레이터를 종료하는 코드가 숨어있기 때문이에요. 

1

MDU 유인동

네^^ 말씀주신대로 reduce 를 그렇게 만들었지만 map 과 filter는 보여주신 소스대로 작성한적이 없어서요. 

reduce는 acc가 없을 때 하나를 꺼내기 위해서 이터레이터로 만들었어요. 

감사합니다.

0

Hdougie

인동님, 죄송하지만 질문 하나만 더 하겠습니다.
그러면 reduce에  if(!iter) 요 부분은 acc를 만들기 위해서 한다는 것을 알겠는데,

else 이후에 iter = iter[Symbol.iterator]()를 해주는 이유는 무엇인가요?
생각해보면 모든 상황에  인자로 이터러블을 넣어주고 있기도 하고 설사 이터레이터가 들어가도 array처럼 웰 폼 이터레이터라 어차피 자기 자신이 나오지 않나요??

0

Hdougie

강의를 듣고 강의 노트 복습하던 부분이라 정확히 언제인지는 모르겠지만 

04. Map,filter,reduce/ 2 / lib / fx.js 의 reduce

07. 지연성 1,8. 지연성 2 / 4 / lb / jx.js 에 6번째 줄의 reduce

어차피 While 문은 for ~of 문을 구체적으로 보여주시려고 바꾸신거라 이해가 가는데 질문에 올린 부분은 잘 모르겠네요 ㅠ

0

MDU 유인동

안녕하세요 :) 

강의의 어느 부분인지 알려주실 수 있을까요?

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

1

111

1

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

0

72

2

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

0

52

1

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

0

112

1

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

1

463

1

pipe함수

1

530

1

Identity 함수

0

450

1

함수형 프로그래밍이란

0

831

1

reduce 예제 코드 제안!

0

403

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

378

2

fxts에 go가 없는 이유?

0

839

1

비동기 관련 질문입니다!

0

458

1

질문 있습니다.

0

514

1