JavaScript ES 6+]コードを値として表示機能を強化


1. go


評価値の即時使用
const go = (...args) => reduce((a, f) => f(a), args);

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

2. pipe


戻り関数
合成関数の作成
最終的には内部でgoを用いた関数と考えられる.
const pipe = (f, ...fs) => (...as) => go(f(...as), ...fs);

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

log(f(0, 1));

3.goを使用して読み取り可能なコードを生成


goで以前書いたコード(?)を再生成彼にやらせましょう.
log(
    reduce(
        add,
        map(p => p.price,
            filter(p => p.price < 20000, products))));
🧙🏻‍♂️
go(
    products,
    products => filter(p => p.price < 20000, products),
    products => map(p => p.price, products),
    prices => reduce(add, prices),
    log);
上から下まで読めるようになり、読みやすくなりました.

4.goとcurryを使用してより読みやすいコードを作成する


Curryの作成

const curry = f =>
    (a, ..._) => _.length ? f(a, ..._) : (..._) => f(a, ..._);
関数(f)を受信して関数(=>すべて)を返す
実行時に2つ以上のパラメータがある場合は、すぐに受信した関数を実行し、/2個未満の場合は関数を戻し、その後受信したパラメータを結合して実行します.
const mult = curry((a, b) => a * b);
log(mult(3)(2));

const mult3 = mult(3);
log(mult3(10));
log(mult3(5));
log(mult3(3));

の手配を



🧙🏻‍♂️

使用

go(
    products,
    filter(p => p.price < 20000),
    map(p => p.price),
    reduce(add),
    log);
上記のように簡単にできます.

5.関数の組合せを使用した関数の作成

const total_price = pipe(
    map(p => p.price),
    reduce(add));

const base_total_price = predi => pipe(
    filter(predi),
    total_price);

go(
    products,
    base_total_price(p => p.price < 20000),
    log);

go(
    products,
    base_total_price(p => p.price >= 20000),
    log);