• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

21.02.07 23:56 작성 조회수 240

0

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

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

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

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

답변 6

·

답변을 작성해보세요.

1

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

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

제가 작성한 '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

안녕하세요 :) 

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

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

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

1

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

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

감사합니다.

0

Hdougie님의 프로필

Hdougie

질문자

2021.02.10

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

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

0

Hdougie님의 프로필

Hdougie

질문자

2021.02.08

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

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

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

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

0

안녕하세요 :) 

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