Функциональное программирование. Какой лучший способ сохранить ссылку на результат функции для последующего использования? - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в функциональном программировании (не знаю языков fp, кроме javascript), и у меня есть проблема с практикой кода, которая давно меня беспокоила. Извините за общее название, надеюсь, этот пример прояснит вопрос:

// right to left
compose(
  useXAgain,
  ...
  doSomethingElse,
  useX,
  getX
)(input);

Какой лучший способ передать выходные данные getX для использования XAgain? Я могу придумать 3 способа сделать это:

  1. Сохранить в переменной

    let X = undefined;
    compose(
      useXAgain(X),
      ...
      doSomethingElse,
      res => { X = res; return useX(X); },
      getX
    )(input);
    
  2. Передайте его по цепочке, пока он не достигнет useXAgain

    compose(
      ({X, res}) => useXAgain(X, res),
      ...
      ({X, res}) => ({ X, res: doSomethingElse(res) }),
      X => ({X, res: useX(X) }),
      getX
    )(input);
    
  3. Поместите все после getX в новую функцию

    const afterGetX = X => compose(
      useXAgain(X),
      ...
      doSomethingElse,
      useX
    )(X);
    
    compose(
      afterGetX,
      getX
    )(input);
    

Мне не нравится ни один из этих способов, ни один из них не изящен и не запутывает код. Пожалуйста, поделитесь, что вы думаете, это лучший способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...