안녕하세요 2년차 개발자입니다.
카페에서 커피마시면서
코딩하기를 좋아해요.

Software Engineer

go, pipe - code to value

코드를 값으로 다뤄본다.

코드를 값으로 다룰 수 있다.
코드의 표현력을 높일 수 있다.

코드를 값으로….

예제

    const array = [1,2,3];

    const iter = array[Symbol.iterator]();

    iter.next(); // { value : 1 , done : false }
    iter.next(); // { value : 2 , done : false }
    iter.next(); // { value : 3 , done : false }
    iter.next(); // { value : undefined , done : true }

    const go = (...args) => reduce((a, f) => f(a), args);
    const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs);

    go(
        0,
        a => a + 1,
        a => a + 10,
        a => a + 100,
        log);
    // 111

    const f = pipe(
        (a, b) => a + b,
        a => a + 10,
        a => a + 100);

    log(f(0, 1));

    go(
        products,
        products => filter(p => p.price < 20000, products),
        products => map(p => p.price, products),
        prices => reduce(add, prices),
        log);

    const curry = f => 
        (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);
    
    const mult = curry((a, b) => a * b);

    const mult3 = mult(3);

더 나은 표현 찾기

    // curry function을 사용해 go, pipe 를 정리