해결된 질문
작성
·
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