reduce의 acc가 없는 경우 코드에 의문이 있어 질문드립니다.
487
작성한 질문수 1
안녕하세요! 초기값 acc가 없는 경우 iter에서 첫 값을 acc로 지정하고 next() 메서드를 통해 두번째 값부터 f(acc, a)를 누적하는 로직에서 궁금한 점이 있어 질문 남깁니다.
인자에 acc가 부재한 경우 if(!iter) 조건이 아니라 if(!acc) 조건으로 iter의 첫 값을 acc에 지정해주는 게 맞지 않나 싶었습니다. 해당 부분 시작 전에도 JS 내장 reduce 방식처럼 acc가 없는 경우 사용하는 방식이라고 소개하셔서 코드 부분에서 더 괴리가 있는 것 같습니다.
또한 acc[Symbol.iterator](); 의 경우 acc는 초기값이고, iterator 프로토콜을 따르는 배열은 인자로 주어진 iter니까 iter[Symbol.iterator]()가 맞지 않나요?
const reduce = (f, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next().value;
}
...
}
강의에서는 위와 같이 작성해주셨는데, 제가 생각했을 때 이해가 되는 코드는 아래와 같습니다.
const reduce = (f, iter, acc) => {
if (!acc) {
iter = iter[Symbol.iterator]();
acc = iter.next().value;
}
...
}
acc가 없는 경우 인자가 2개가 들어온다고 생각하면, acc를 3번째 인자로 두어야 acc가 undefined라 !acc가 true 처리되어서 if문을 돌 것 같아서 순서를 바꿔보았습니다.
제가 배움이 얕아 잘못 생각하고 있는 것이라면 어떤 부분에서 잘못 생각하고 있는건지 여쭙고 싶습니다. 감사합니다.
-----
라고 생각했는데, 아예 iter랑 acc를 재지정해주셨다는 걸 알게 되었습니다. 다른 수강생들에게도 도움이 되기 위해 정리해보는데, 혹시 오류가 있다면 짚어주시면 감사하겠습니다.
초기값(acc)이 함수로 전달되지 않는 경우 인자가 당겨져서 if 문 이전까지는 acc가 iterable(배열)이고, iter가 부재해undefined가 됩니다. 그러면 초기값이 없다는 if 문의 판별 조건은 (!iter)가 됩니다.
if문 내부에서는 acc가 iterable이니 이를 iter로 다시 지정하는 것이고, acc는 단어 뜻 그대로 초기값으로 설정하기 위해 iter.next().value로 iterable의 첫 값으로 지정합니다.
next()를 해서 iterable은 두 번째 값부터 for문에서 iteration을 진행하게 됩니다.
iter와 acc 단어 자체의 의미에 집중하다보니 이해가 되지 않았는데, 당겨진다고 생각하니까 바로 납득이 되네요. 오류가 있다면 지적 부탁드립니다. 감사합니다!
프론트엔드 실무에서 어떤때에 쓰이는지 궁금합니다
1
120
1
함수형 프로그래밍 심화 강의 자료 추천
0
96
2
함수형 자바스크립트 프로그래밍 책
0
66
1
filter가 아무것도 걸러내지 못하는 경우
0
129
1
take 함수의 성능적면에서의 이점
1
481
1
pipe함수
1
535
1
Identity 함수
0
452
1
함수형 프로그래밍이란
0
839
1
reduce 예제 코드 제안!
0
405
1
fxts를 배워보려고 합니다.
1
537
1
flatMap 관련 질문드립니다~
1
448
1
다용성이 높은 L.flatMap
0
359
1
변수에 재 할당 금지~
0
540
1
DevTools라고 옆에 결과 확인하는거 어떻게 하나요?
0
485
2
소요시간에 관해서 질문드립니다
1
461
1
join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!
0
467
2
reduce에 L.range를 사용할 때
0
528
2
[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유
3
744
2
제가 이해한 C.Reduce와 Reduce의 동작 차이 정리
2
798
3
go, pipe 함수 관련하여 질문 드립니다.
1
502
1
안녕하세요 강사님!
0
382
2
fxts에 go가 없는 이유?
0
846
1
비동기 관련 질문입니다!
0
464
1
질문 있습니다.
0
520
1





