Я новичок в функциональном программировании (не знаю языков fp, кроме javascript), и у меня есть проблема с практикой кода, которая давно меня беспокоила. Извините за общее название, надеюсь, этот пример прояснит вопрос:
// right to left
compose(
useXAgain,
...
doSomethingElse,
useX,
getX
)(input);
Какой лучший способ передать выходные данные getX для использования XAgain? Я могу придумать 3 способа сделать это:
Сохранить в переменной
let X = undefined;
compose(
useXAgain(X),
...
doSomethingElse,
res => { X = res; return useX(X); },
getX
)(input);
Передайте его по цепочке, пока он не достигнет useXAgain
compose(
({X, res}) => useXAgain(X, res),
...
({X, res}) => ({ X, res: doSomethingElse(res) }),
X => ({X, res: useX(X) }),
getX
)(input);
Поместите все после getX в новую функцию
const afterGetX = X => compose(
useXAgain(X),
...
doSomethingElse,
useX
)(X);
compose(
afterGetX,
getX
)(input);
Мне не нравится ни один из этих способов, ни один из них не изящен и не запутывает код. Пожалуйста, поделитесь, что вы думаете, это лучший способ сделать это.