#TIL_21.8.21

ISOJ·2021년 8월 21일
0

Today I Learned

목록 보기
11/43
post-thumbnail

go

  • 주어진 인자들을 통해 하나의 값으로 축약을 해나가는 함수
const go = (...args) => reduce((a, f) => f(a) , args) // a = 0 + 1 (값), f(a) = a + 10 (다음 실행 함수) ... 연속적으로 계속 실행됨

go (
    0,
    a => a + 1,
    a => a + 10,
    a => a + 100,
    log)
    
// 인자를 다음 함수에게 전달하고, 이 함수의 결과를 다음 함수로 전달 ...
// reduce

//ex 2
go(
    products,
    products => filter(p => ~~~ , products),
    products => map(p => ~~~ , products),
    prices => reduce(add, prices),
    log)

pipe

  • go 와 다르게 함수를 리턴하는 함수
  • 함수들이 나열되어 있는 합성된 함수를 만드는 함수
const pipe = (...fs) => (a) => go(a, ...fs)

// pipe 내부에 첫번째 인자로 함수가 있을 때 처리해주는 방법
const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs)

const p = pipe(
    (a, b) => a + b,
    a => a + 10,
    a => a + 100)
    
p(0, 1) // 111

curry

  • curry 함수는 받아둔 함수를 원하는 시점에서 평가시키는 함수
  • 함수를 받아서 함수를 리턴하고, 원하는 갯수만큼의 인자가 들어왔을 때 받아두었던 함수를 나중에 평가시키는 함수
const curry = f => 
(a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._)
// 첫번째 인자(a) 와 나머지 인자(..._) 를 받음
// _.length > 0 ... 함수에 인자가 2개 이상 전달 되었을 때를 의미함
// 인자가 2개 이상이라면 받아둔 함수를 즉시 실행
// 아니라면 함수를 다시 리턴함 ... 그 후에 받은 인자를 합쳐서 함수를 실행

const mult = curry((a, b) => a * b)
log(mult(3)(2)) // 6

or

const mult = mult(3)
log(mult(10)) // 30
log(mult(5)) // 15
log(mult(3)) // 9
  • curry 를 적용하면 위에서 배웠던 함수들을 간결하게 사용할 수 있다.
go(
    products,
    products => filter(p => ~~~ , products),
    products => map(p => ~~~ , products),
    prices => reduce(add, prices),
    log)
    
위 함수를,

go(
    products,
    filter(p => ~~~),
    map(p => ~~~),
    reduce(add),
    log)
로 표현할 수 있다.

함수 조합으로 함수 만들기

  • 코드 중복을 밖으로 빼내어 관리하기
go(
    products,
    filter(p => ~~~),
    map(p => ~~~),
    reduce(add),
    log)
    
// 다른 함수에서 map 과 reduce 가 동일하게 사용된다면,

const total_price = pipe (
	map(p => ~~~),
    reduce(add))
    
go(
    products,
    filter(p => ~~~),
    total_price,
    log)
    
// 또 여기서 구조는 같지만 인자가 다른 함수의 경우에도 따로 빼낼 수 있다.

const base_total_price = predi => pipe(
    filter(predi),
    total_price)
    
 go(
    products,
    base_total_price(p => ~~~),
    log)

회고

미뤄두었던 함수형 프로그래밍 강의를 다시 꺼내왔다.
조금은 이해가 가기 시작하는 것 같기도 하지만, 문제는 실제로 사용해보기에는 아직 힘들 것 같다.
로직의 입출력을 따라가보면서 공부하고있다.

보다보면 되겠징..

profile
프론트엔드

0개의 댓글