인프런 커뮤니티 질문&답변

이성필님의 프로필 이미지
이성필

작성한 질문수

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

fxjs가 lodash나 ramdajs에 비해 얻는 장점이 뭐가 있을까요?

해결된 질문

작성

·

2.8K

5

실무에서 함수형 프로그래밍 도입을 위해 라이브러리들을 고민하고 있습니다.

거론되는 라이브러리는 ramdajs, lodash가 있구요.

아무래도 fxjs를 통해 FP를 배우기 시작해서 저에게 제일 편한건 fxjs이긴 합니다.

다만 위 라이브러리들이 더 글로벌하게 쓰이고 있어서 팀원들을 설득하기 위해 알아보고있지만,

아직 경험이 많이 없다보니 그런 안목이 아직 부족합니다.

위 라이브러리들을 훑어 봤을 때

fxjs로 transducer를 더 직관적으로 작성할 수 있고,

병렬평가가 가능합니다. 이외에도 여타 다른 라이브러리에 비해 장점으로

무엇을 꼽을 수 있을까요..?

그리고 fxjs2의 경우 tree shaking을 지원하는지도 궁금합니다

답변 3

8

유인동님의 프로필 이미지
유인동
지식공유자

안녕하세요. :)

감사한 질문이네요! 조금 정리해서 적어보았어요.

1. 대부분의 라이브러리들이 Promise를 잘 지원하지 못합니다.

2. Promise를 잘 지원하지 못하면 async/await 와 함께 사용하지 못합니다.

3. async/await를 사용하지 못하면 비동기 에러 핸들링이 어려워집니다.

4. fxjs는 ES6 표준 이터러블 프로토콜을 따르고 있어 이터러블/이터레이터/제너레이터와 잘 조합됩니다.

5. fxjs는 Promise를 잘 지원합니다.

6. fxjs는 지연 평가와 Promise가 함께 잘 동작합니다.

7. fxjs는 async/await 와 함께 사용할 수 있으며, 비동기 에러핸들링이 쉽습니다.

8. fxjs는 병렬적 동시 평가를 다루는 많은 함수들이 있습니다. (C.takeAll, C.takeRace, C.race, C.map 등..)

9. fxjs는 함수 하나 하나가 코드가 간결하고 이해하기 쉽게 잘 작성되어있습니다.

10. fxjs는 tree shaking 을 잘 지원합니다.

11. fxjs는 이전 브라우저, 최신 브라우저, CommonJS, ESM 등의 환경을 모두 잘 지원하고 있습니다.

12. fxjs는 슬랙 채널을 운영하고 있습니다. 

초대링크

https://join.slack.com/t/fxjs/shared_invite/enQtNzMzMjM2OTQyNjEzLTI2NzlhMzQ0N2FkZjUwOTkxMmIwNDUzM2YyYjFkMDI1ODgyYWRjMWUzYmViODQ2ZjRlMWEzZTE4NzYzZDY1YjA

13. 다른 라이브러리에서 아래와 같은 코드가 동작하는지 테스트해보세요. 대부분의 다른 라이브러리들은 1번 상황에서 이상한 값이 나오고 2번 상황에서는 에러핸들링이 안되고 에러가 터질거에요. :)


// 1
async function f1() {
const res = await go(
[1, 2, 3, 4, 5],
L.map(a => new Promise(resolve => resolve(a * a))),
L.filter(a => new Promise(resolve => resolve(a % 2))),
L.take(3),
reduce((a, b) => a + b));

return res * 10
}

f1().then(console.log); // 350

// 2
async function f2() {
try {
return await go(
[{ val: 1 }, { val: 2 }, null, { val: 4 }, { val: 5 }],
L.map(({val}) => new Promise(resolve => resolve(val + 10))),
L.filter(a => a % 2),
L.take(3),
reduce((a, b) => a + b));
} catch (e) {
return 0;
}
}

f2().then(console.log); // 0

슬랙에서 뵈어요 :)

2

이성필님의 프로필 이미지
이성필
질문자

세상에! 자세한 설명 너무나 감사합니다. 초대까지 해주시다니 다시 감사합니다!

1

와 정말로 1번 상황에서 이상한 값이 나오네요 !

이성필님의 프로필 이미지
이성필

작성한 질문수

질문하기