inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

reduce에서 nop 지원

함수형 프로그래밍 테스트

해결된 질문

284

쿠크다스

작성한 질문수 16

0

안녕하세요. 학습 중 어려움이 있어 질문드립니다.

문제 상황 1 

take 함수 코드를 작성하면서 limit 값이 0 일 때도 동작하는 코드를 작성하고 싶어 코드를 아래와 같이 수정했는데요. 아래와 같이 작성하니깐  문제가 발생하더군요. 디버깅을 통해 원인이 두번째 인자로 받은 iter가 기존 코드보다 순회를 한번 더 해 iter를 참조하고 있는 다른 함수에서 부수효과가 발생해서 생긴 원인이드라고요.

const take = curry((l, iter) => {
let res = [];
iter = iter[Symbol.iterator]();
return function recur() {
let cur;
while (!(cur = iter.next()).done) {
const e = cur.value;
if (e instanceof Promise) {
return e
.then(e => res.length == l ? res : (res.push(e), recur()))
.catch(e => e == nop ? recur() : Promise.reject(e))
}
if (res.length == l) return res;
res.push(e);
}
return res;
}();
});

문제 상황 2.

아래 코드의 경우 reduce를 하기 위해 acc 값을 header를 받아오는데 filter의 결과로 nop을 받아와 에러처리가 안되 에러가 발생했습니다.

go([0, 1, 2, 3, 4],
a => a,
L.map(a => Promise.resolve(a * a)),
L.filter(a => Promise.resolve(a % 2)),
reduce(add),
log);
const reduce = curry((f, acc, iter) => {
if (!iter) return reduce(f, head(iter = acc[Symbol.iterator]()), iter);

iter = iter[Symbol.iterator]();
return go1(acc, function recur(acc) {
let cur;
while (!(cur = iter.next()).done) {
acc = reduceF(acc, cur.value, f);
if (acc instanceof Promise) return acc.then(recur);
}
return acc;
});
});

함수형-프로그래밍 javascript

답변 2

1

MDU 유인동

익숙하지 않음에서 오는 것 아닐까요? :) 개인적으로는 디버깅 자체가 어려운거고 디버깅이 더 어려운지는 잘 모르겠어요. 

limit 값이 0일때는 즉시 빈배열을 리턴하도록 하는게 낫지 않나 생각되구요. 

reduce에서 nop을 처리하고 계신가요?

0

쿠크다스

런타임에 코드의 흐름과 프로그래밍에서 코드 흐름이 달라 디버깅하는데 많은 어려움을 겪었습니다. 아직 함수형 프로그래밍에 미숙해 발생하는 문제인지 아니면 원래 함수형 프로그래밍이 디버깅하기 어려운지 알고싶습니다.

그리고 실제 함수형 프로그래밍을 위해 작성된 라이브러리를 사용할 때, 위와 같이 reduce를 실행할 때, acc 값이 0이 될때 에러가 발생할 수 있다라는 것을 염두하고 프로그래밍을 해야하는지 궁급합니다.

강의 보면서 많이 배우고 있습니다. :)

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

1

111

1

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

0

72

2

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

0

52

1

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

0

113

1

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

1

463

1

pipe함수

1

530

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

379

2

fxts에 go가 없는 이유?

0

839

1

비동기 관련 질문입니다!

0

460

1

질문 있습니다.

0

515

1