inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

L.range, L.map, L.filter, take 의 평가 순서

전체적인 질문있습니다..!

해결된 질문

113

큰돌

작성한 질문수 3

0

삭제된 글입니다

함수형-프로그래밍 javascript

답변 2

1

MDU 유인동

1. 모나드에 대하여

일단 모나드는 많이 생각 안하셔도 됩니다.

저도 모나드에 대해서는 가볍게만 설명한 것이고 깊이 다루지는 않았습니다. 제가 모나드에 대해 아주 깊게 알지 못하기도 하구요. 

클로저, 엘릭서 등의 함수형 프로그래밍 언어에서는 모나드에 대한 개념을 거의 알 필요가 없으며, 언어에서도 책에서도 거의 설명하지 않습니다. 하스켈, 스칼라 등에서는 모나드가 강조됩니다. 보통 동적 타입 언어 혹은 Lisp계열 언어에서는 모나드가 강조되지 않고 정적타입 언어에서 강조됩니다.

동적 타입 언어인 자바스크립트에서 함수형 프로그래밍을 할 때도 클로저나 Lisp 계열의 패러다임으로 함수형 프로그래밍을 바라볼 때는 자바스크립트의 기본 값을 다루는 함수형 프로그래밍을 합니다. 본 강의는 ES6+의 이터러블/이터레이터/제너레이터 프로토콜과 Promise를 주된 값으로 바라보고 Lisp 스타일의 프로그래밍을 합니다. Promise가 배열이나 Promise 등이 모나드의 성질을 띄지만 이것을 꼭 모나드라 말하지도 않고 별로 강조하지 않습니다. 오히려 Promise라는 값 자체의 스펙을 정확히 아는 것에 집중합니다. 

자바스크립트에서도 ADT 식으로 함수형 프로그래밍을 하는 fantasy-land, Ramda.js 등에서는 모나드를 강조합니다. 런타임에서 타입을 체크하기는 하지만요. 혹은 자바스크립트로 컴파일 되는 정적 타입 언어인 PureScript 같은 언어 등에서도 모나드가 강조됩니다. TypeScript위에 ADT를 얹어서 가는 시도도 있습니다.

혹은 RxJS 처럼 Observable 을 중심으로 map, filter, take 등의 오퍼레이터를 만들어서 함수형 리액티브 프로그래밍을 하는데, 여기서도 모나드를 특별히 언급하지 않습니다.

부연이 길었네요.

요지는 저 개인적으로는 동적타입인 자바스크립트에서는 map, filter, take, reduce를 언어로 보고, 잘 추상화된 내장 값들을 기반으로 함수형 프로그래밍을 하는 것이 가장 잘 맞고 어울린다고 생각합니다. 그리고 추가로 비동기 동시성 프로그래밍을 위해 Promise/async/await 프로토콜에 대해 잘 알아야하겠구요. 그 다음에 에러 핸들링을 위해 try/catch,  async/await/try/catch에 대해 잘 알고 활용해야한다고 생각합니다. 해당 언어에 꼭 맞는 방법이기 때문입니다. 

아무리 에러를 내가 다른 방법으로 핸들링하고자 해도 내가 사용해야하는 라이브러리나 프레임워크가 에러를 던집니다. 그런 모든 에러를 항상 모나드로 랩핑하거나 ADT로 랩핑해서 효과를 관리한다는 것도 생각보다 쉽지 않습니다.

언어 클로저나 엘릭서에서도 try catch를 합니다. try catch를 안하는 것이 곧 함수형 프로그래밍은 아닙니다.

2. 에러 핸들링

저는 에러 핸들링은 기본적으로 try catch를 기반으로 합니다. 에러일 필요 없는 로직들은 map, filter, reduce, take를 기반으로 핸들링을 합니다. 

3. 안전한 합성

안전한 합성에 대해서는 '응용편'의 '안전한 합성에 대해'를 참고해주세요. map, filter 등을 사용해서 없을 수 있는 상황을 다룰 수 있습니다.

4. 실행순서에 대해

두 Promise 체인 실행을 순서를 제어하지 않은 상황에서, 뭐가 왜 먼저 로그가 출력되었는지는 큰 의미는 없습니다. 

감사합니다.

 

0

큰돌

자세한 설명 정말 감사합니다. try catch는 캐바케였군요.. https://jhc9639.blog.me/221505074700?Redirect=Log&from=postView

 

이 책에 보면 try catch를 쓰지 말라고 되어있었거든요 하하하 저는 유인동개발자님의 케이스를 따르겠습니다. 좋은 강의 감사합니다. 

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

1

111

1

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

0

72

2

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

0

54

1

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

0

114

1

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

1

463

1

pipe함수

1

531

1

Identity 함수

0

451

1

함수형 프로그래밍이란

0

832

1

reduce 예제 코드 제안!

0

405

1

fxts를 배워보려고 합니다.

1

537

1

flatMap 관련 질문드립니다~

1

444

1

다용성이 높은 L.flatMap

0

358

1

변수에 재 할당 금지~

0

540

1

DevTools라고 옆에 결과 확인하는거 어떻게 하나요?

0

483

2

소요시간에 관해서 질문드립니다

1

458

1

join에 대한 내용이 궁금증이 해결되지 않아서 질문드립니다!

0

465

2

reduce에 L.range를 사용할 때

0

527

2

[이해내용 공유] Lazy 에서 C.reduce가 병렬 효과를 내는 이유

3

739

2

제가 이해한 C.Reduce와 Reduce의 동작 차이 정리

2

787

3

go, pipe 함수 관련하여 질문 드립니다.

1

499

1

안녕하세요 강사님!

0

380

2

fxts에 go가 없는 이유?

0

840

1

비동기 관련 질문입니다!

0

462

1

질문 있습니다.

0

517

1