-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
강의 후반 변경된 map, filter,reduce 함수 질문
21.02.07 23:56 작성 조회수 266
0
강의 초반에는 이터러블 인자를 굳이 이터레이터로 바꾸는 코드를 작성하지 않았는데
강의 중후반에는 좀 이터러블 인자를 이터레이터로 만들어주는 코드를 작성한 이유가 있을까요??
강의중 예시에는 iter에 들어오는 인자가 거의 다 well form이터레이터라
인자 자체가 이터러블이자 이터레이터라 굳이 코드 작성시 필요가 없어보였거든요..
답변을 작성해보세요.
1
유인동
지식공유자2021.02.11
뭔가 오해하고 계신거 같아 정리를 했으면 해요.
우선 저는 이터러블 프로토콜에 대해서 정확히 알고 있고 이 강의 전체 예제에서 불필요하게 이터레이터로 만드는 코드를 작성한 적이 없습니다.
제가 작성한 '04. Map,filter,reduce/ 2 / lib / fx.js 의 reduce' 이곳에서는 아래와 같이 else 절이 없습니다.
아무래도 제 생각에는 질문자님께서 질문자님의 강의노트에 이전에 코드를 자유롭게 작성해보시다가 else 절이 있게 작성을 해보시지 않으셨을까 생각이 되어요.
'07. 지연성 1,8. 지연성 2 / 4 / lb / jx.js 에 6번째 줄의 reduce' 이곳에서는 while을 사용하기 때문에 while 에서는 next()를 내부적으로 순회시켜주는게 아니라 직접해야하기 때문에 이터레이터로 만들어두어야만 하고 그래서 else 절에서 이터레이터로 만들고 있습니다.
while을 사용하는 이유는 for...of 문을 사용할 경우 promise를 제어하기 위해 return 등으로 for...of 문을 종료하려하면 내부적으로 이터레이터를 종료하는 코드가 들어있기 때문에 while을 사용해서 풀어야하기 때문입니다. 연관 답변 링크를 첨부드립니다.
https://www.inflearn.com/questions/17067
강의들어주셔서 감사드리고 답변이 되셨길 바래요.
감사드립니다.
1
유인동
지식공유자2021.02.11
안녕하세요 :)
질문자님이 보여주신것과 동일하게 코드를 작성한적이 없어요.
while을 하면서 직접 next를 하기 위해서 작성한거에요. while을 하기 위해서는 next를 쓸 수 밖에 없는 것이죠. 그러기 위해선 이터레이터라 되어야만하구요.
그래야했던 이유는 for...of 에 제너레이터를 종료하는 코드가 숨어있기 때문이에요.
1
유인동
지식공유자2021.02.08
네^^ 말씀주신대로 reduce 를 그렇게 만들었지만 map 과 filter는 보여주신 소스대로 작성한적이 없어서요.
reduce는 acc가 없을 때 하나를 꺼내기 위해서 이터레이터로 만들었어요.
감사합니다.
0
Hdougie
질문자2021.02.10
인동님, 죄송하지만 질문 하나만 더 하겠습니다.
그러면 reduce에 if(!iter) 요 부분은 acc를 만들기 위해서 한다는 것을 알겠는데,
else 이후에 iter = iter[Symbol.iterator]()를 해주는 이유는 무엇인가요?
생각해보면 모든 상황에 인자로 이터러블을 넣어주고 있기도 하고 설사 이터레이터가 들어가도 array처럼 웰 폼 이터레이터라 어차피 자기 자신이 나오지 않나요??
0
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
답변 6