🔥[새 기능 안내] 로드맵 기능 오픈
함수형 프로그래밍과 JavaScript ES6+

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

(17개의 수강평)

572명의 수강생

55,000원

유인동
평생
초급, 중급
수료증
71개 수업, 총 8시간 7분
위시리스트 추가
Woo  Sangin 프로필

안녕하세요 Woo Sangin 8일 전

질문이 있는데..

파이참 쓰시는거 같은데 혹시 파이참에서 컨솔창 어떻게 여는지 알려주실수 있을까요?

감사합니다..

1
후리덤 프로필

a instanceof Promise 후리덤 14일 전

fxjs 와 mql 를 애용하는 개발자입니다.

 

최근 사용한 어떤 모듈에서 parameter 수에 따라 비동기 처리에 대한 응답을

callback 패턴과 Promise 패턴 모두 지원하는 함수가 있었습니다.

 

go 함수를 통해 값을 다루어왔기 때문에 당연히 Promise 패턴을 생각하고 코딩을 했습니다.

그런데 예상과는 다르게 동작했고, 무엇보다 go 함수 결과에 catch 메소드 자체가 존재하지 않았습니다.

 

알고보니 해당 모듈의 함수에서 bluebird Promise 를 사용하고 있어서

fxjs 내부의 a instanceof Promise 부분에 걸려들지 않았던 것입니다.

그래서 메소드 전체를 new Promise 로 감싸고 callback 함수에서 resolve/reject 처리하여 진행하였습니다.

 

그런데 문득, Promise 값인지 아닌지를 판단하는 a instanceof Promise 부분까지도,

함수로 받게끔 할 수 있다면 어떨까 하는 생각이 들었습니다.

is_promise = a => a instanceof Promise

대신 is_promise = a => a instanceof Promise || a instanceof blue_bird_Promise

 

물론 함수를 사용할 때마다 해당 함수를 넘기는 것이 아니라,

fxjs 내부에 is_promise = a => instanceof Promise 부분은 이미 정의되어 있고,

fxjs 초기 설정시 is_promise 함수를 다른 함수로 대체하여 사용할 수 있도록 허용하는 것을 의미합니다.

1
Younghwan Nam 프로필

function* 없이 지연성이 있는 함수를 만들 수 있을까요? Younghwan Nam 16일 전

주어지는 generator기능이 없이, generator와 동일한 역할을 수행하는 함수를 코드로 보고 싶습니다.

2
Jade Stern 프로필

사운드 싱크가 안맞는 것 같습니다.. Jade Stern 17일 전

저만 그런건가요?

6
아로마홈키퍼 프로필

products가 사라져도 왜 괜찮은지 모르겠어요.... 아로마홈키퍼 19일 전

curry 함수에 의해서

products =>filter(p=>p.price <20000, products) 가 products ⇒ filter(p⇒p.price <2000)(products) 가 되는 것은 이해하였습니다. 다만 어째서

products ⇒ filter(p⇒p.price <2000)(products) 가

filter(p⇒p.price <2000) 랑 같은 것인지는 이해가 되지 않습니다.

모양 자체도 (인자) ⇒ (실행할 함수) 의 모양에서 아예
(함수) 의 모양으로만 바뀌었는데, 이렇게 될 경우 인자를 주지도 않고 작동하는 함수? 처럼 보입니다.

혹시 go 함수의 reduce 함수 자체가 이미 f(acc, a)를 할때 f(products, filter(....)) 와 같은 모양이 되기에 그런것일 까요?

3
아로마홈키퍼 프로필

pipe 함수 인자관련 질문있습니다 아로마홈키퍼 21일 전

const pipe = (...fs) => (a) => go(a, ...fs);

const f = pipe(

a => a+1,

a=> a+10,

a=> a+100

)

 

f(0)

이 부분에서 질문이 있습니다.

1. f 함수는 어떻게 0이라는 파라미터를 받을 수 있는가?

- pipe 함수 자체가 ...fs를 파라미터로 받기에 가능한 것인가요?

2. pipe 함수에서의 (a)가 어떻게 f(0)에서의 0으로 연결되는지 이해가 잘 안됩니다. 

f(0) = pipe(...fs)(0) 이렇게 되는 건가요?

1
류명한 프로필

go, pipe, reduce의 비동기 제어에서의 성능 개선에 대한 질문입니다. 류명한 22일 전

go, pipe, reduce의 비동기 제어 부분에서 reduce함수를 recur(acc)를 리턴하는 방식으로 고치면

go(1, a => a + 10, Promise.resolve(a + 100), a => a + 1000, a => a + 10000)에서 a => a + 10과 a => a + 1000, a => a + 10000이 하나의 콜스택에서 동작하기 때문에 성능적으로 더 좋고 효율적으로 동작하는 reduce가 된다고 설명해주셨는데요. 

혹시 이 부분을 조금만 더 자세히 설명해주실 수 있을까요? 아직 자바스크립트에서의 비동기 실행에 대한 이해가 부족한 탓인지, 아니면 혹시 이벤트루프에 대한 이해가 부족한 탓인지 이 부분이 잘 이해가 되지 않네요. 

감사합니다. 

1
류명한 프로필

혹시 3편은 언제쯤 나올지 알 수 있을까요? 류명한 28일 전

안녕하세요. 

좋은 강의 올려주셔서 진심으로 감사드립니다. 

강의를 하나씩 들을 때마다 함수형 프로그래밍을 통해 가능해지는 코드의 간결함과 효율성에 매번 감탄하면서 듣고 있는데요. 지금 듣고 있는 강의를 얼른 듣고 소화시키고 더 깊게, 더 효과적으로 응용하고 싶은 욕심이 많이 드는 것 같습니다. 

현재 응용편까지 나와있고 3편은 데이터베이스와 관련된 강의가 될 것이라고 들었는데, 혹시 3편은 언제쯤 출시가 될지, 그리고 데이터베이스와 관련해서 좀 더 구체적으로 어떤 내용의 강의가 될지 미리 조금만 알려주실 수 있을까요? 

감사합니다. 

1
주홍철 프로필

전체적인 질문있습니다..! 주홍철 1달 전

질문

1. 모나드와 try-catch

유인동개발자님께서는 Promise를 쓰시면서 안전하게 값을 래핑하여 모나드를 하셨는데 문득 try catch로 하면되잖아? 라는 생각이 들어서 더 모나드를 공부했고 정리한 내용입니다. 혹시 이게 맞는지 확인좀 부탁드립니다. 

 

정리한 내용

`try catch`를 쓰게 되면 로직을 담고 있는 컨테이너의 벨트의 라인이 2개로 분리되어 투명성을 잃게 된다. 물론 `try catch`를 써서 애러처리를 할 수도 있지만 함수형 프로그래밍에서는 컨테이너라는 안전한 박스에 담아 실행을 하는게 좋다. 

 

2. 프로미스의  순서문제

```js

const log = console.log

const users = [{name : '큰돌'}, {name : '제호'}, {name : '우람'}, {name : '다빈'}] 

const getUserByName = (name) => users.find(u => u.name === name) || Promise.reject("객체에 없습니다.")

const g = getUserByName;

const f = ({name}) => `${name}이가 춤을 춥니다.`

const fg = x => new Promise((resolve, reject)=> resolve(x)).then(g).then(f) 

fg("큰돌1").catch(_ => _).then(log)

//객체에 없습니다.

 

fg("큰돌").catch(_ => _).then(log)

// 큰돌이가 춤을 춥니다.

 

/*

큰돌이가 춤을 춥니다.

객체에 없습니다.

*/

```

선생님께서 만드신 예제를 변형해서 공부를 하고 있던 도중 이런 순서적인 질문이 생겼는데요. 

분명 객체에 없습니다가 먼저 떠야 하는데 춤을 춥니다가 먼저 뜨는 이유는 객체에 없는 경우 catch까지 실행을 해서 조금 더 느리게 발생이 되고 춤을 춥니다의 경우 catch를 실행하지 않기 떄문에 실행이 조금 더 빠른 것이 맞나요?  

 

2
주홍철 프로필

모나딕한 이라는 것이 무엇인가요? 주홍철 1달 전

map, filter는 모나딕한 작업을 통해 어떠한 이터러블을 반환한다고 하셨는데 모나딕이란 무엇인가요?

4
주홍철 프로필

지연평가 - 이터레이터 질문 주홍철 1달 전

지연평가에서 take부터 시작되는 이유가 iter.next()라는 함수가 선언이 되고 그 이터레이터가 그 밑의 함수로 쭉 들어가서 먼저 실행이 된다가 맞나요? 헷갈려서 질문드립니다 ㅎㅎㅎ ㅠ iter.next()가 실행이 된다면 이터레이터 참조를 하기 위해 take부터 실행이 되는 건가요? 근데 하.. f라는 인자는 while그 다음에 넘기는데.. 음......뭘까요? ㅠㅠ

4
vanila 프로필

async 함수 작성시 vanila 1달 전

안녕하세요,  아래와 같은 함수를 좀더 풀어서 쓴다면 어떤식으로 표현이 가능할까요? 무언가 축약된 표현인거같은데 알고싶습니다.

(asnync () => {
  log(await pa);
}) ();

3
whysee Song 프로필

강의 1분40초쯤, iterable 객체 안에 whysee Song 1달 전

[Symbol.iterator]() {

...

}

라고 메소드명을 대괄호로 묶었는데 이건 왜그런건가요?

 

3
vanila 프로필

L.flatten 평가 시점 관련 vanila 1달 전

flatten -> L.flatten  적용이 되어도 즉시 평가가 되는 이유가 무엇인가요? 

4
iternity 프로필

catchNoop을 해줘야되는 이유에 대해서 궁금한게있습니다. iternity 2달 전

한 콜스택 내에서 error를 catch하지 못했기 때문에 error가 콘솔에 뿜어져서 catchNoop을 해준다고 하셨는데요.

C.reduce가 아니라 그냥 reduce의 경우에는 세로로 하나씩 실행되면서 filter가 Promise.reject(nop)을 리턴할 때가 있는데요. 이 call stack이 끝나고 reduce에 의해 recur이 실행되어 L.map으로 넘어가는데 L.map이 받은 Promise.reject(nop)은 filter와 다른스택 아닌가요? 제 생각으로는 L.map으로 가기전에 L.filter의 처리를 담은 프로미스가 끝나서 한 call-stack이 끝나고 C.reduce와 마찬가지로 에러를 만들어야될 것 같은데 아니네요. 

 

1