inflearn logo
강의

講義

知識共有

関数型プログラミングとJavaScript ES6+アプリケーション

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

解決済みの質問

3021

goohooh

投稿した質問数 1

5

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

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

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

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

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

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

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

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

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

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

함수형-프로그래밍 javascript

回答 3

8

mduniv

안녕하세요. :)

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

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

goohooh

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

1

Kim jae-eok

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

이미지 동시성 다루기

0

116

2

클로저와 같은 함수형 프로그래밍 공부

0

192

2

fx.js

0

439

2

fxjs 라이브러리 takeL 관련하여 질문드립니다.

0

344

2

[ 비동기 상황에서의 Lazy, Strict 기법이 혼합된 평가 ] 에 대한 이해

0

528

1

input값이 이터러블 함에도 range를 쓴 이유가 궁금합니다.

0

468

1

질문있습니다!

1

372

2

DB Insert관련

0

657

2

강의에 대한 제언

2

599

1

DOM 조작 관련 질문입니다.

0

408

1

L.map, L.filter

0

613

1

indexBy 함수에 대한질문입니다.

0

404

2

해당 강의를 듣고 나면

0

397

1

내용없음

0

236

1

함수 추출에 대한 고민

1

286

1

뷰 포트에 보이는 엘리먼트만 이미지 로드하고 싶을 때

1

327

1

기존에 반복문이 1개 돌던거를 이렇게하면 2번 도는데...

0

242

1

array in object... 는 어떤 식으로 재귀가 가능할까요..?

0

271

1

queryToObject 질문드립니다.

0

359

1

재귀는 어떻게 표현할 수 있을까요?

0

315

1

모든 명령형 => 함수형 가능한가요?

0

323

1

명령형 => 함수형 변환

0

340

2

이해한게 맞을까요?

0

215

1

iter의 개별 elements 에 data 를 삽입 또는 변형해서 삽입하는 경우엔 map 으로 제어를 하는게 맞을까요?

0

263

2