Как продемонстрировать простой бессмысленный стиль в JS - PullRequest
0 голосов
/ 28 марта 2019

Стиль Point-Free или молчаливое программирование объясняется в википедии с использованием Python.

def example(x):
  y = foo(x)
  z = bar(y)
  w = baz(z)
  return w

и ..

def flow(fns):
    def reducer(v, fn):
        return fn(v)

    return functools.partial(functools.reduce, reducer, fns)

example = flow([baz, bar, foo])

Как продемонстрировать этот эффект, используя JS в простейшей понятной форме концепции?

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Это легко можно превратить в JS:

 function example(x) {
  const y = foo(x);
  const z = bar(y);
  const w = baz(z);
  return w;
}

... и

function flow(fns) {
  function reducer(v, fn) {
     return fn(v);
  }

  return fns.reduce.bind(fns, reducer);
}

const example = flow([baz, bar, foo]);
1 голос
/ 28 марта 2019

Это функция композиции, и самое простое решение - просто предоставить комбинатор композиции с нужной арностью для данного примера:

const foo = x => `foo(${x})`;
const bar = x => `bar(${x})`;
const baz = x => `baz(${x})`;

const comp3 = (f, g, h) => x => f(g(h(x)));

const fun = comp3(foo, bar, baz);

console.log(
  fun(123))

Чтобы это работало, comp3 каррируется в своем последнем аргументе, а аргументы функции - все унарные функции.

...