@javanub

Каррирование, или все таки функция с несколькими параметрами?

Каррирование, или все таки функция с несколькими параметрами? Что вы обычно выбираете при написании кода и почему? Объясните доступно.
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404
Frontend Developer
Каррирование часто используют в функциональном программировании, когда вендорный код или какой-либо модуль входным параметром принимает функцию и передает в нее свои аргументы, которые вы можете использовать, но при этом хотите передать туда свои:
const foo = myArg => (interfaceArg1, interfaceArg2) => {
  // do something
};

vendor(foo(someValue));


Каррирование часто используют для написания промежуточного ПО.
app.use(express.static('./puplic'));
Понятное дело, что промежуточное ПО static реализовано с использованием каррирования.

Еще пример с использованием библиотеки StyledComponents(не самый простой, конечно):
const buildMediaByConditionFn = conditionFn => (...args) => props => conditionFn(props) && css(...args);
const mobile = buildMediaByConditionFn(props => props.device.isMobile);
const desktop = buildMediaByConditionFn(props => !props.device.isMobile);

const media = {
  mobile,
  desktop,
};

export default media;

Код выше позволит нам писать, вместо:
const Element = styled.div`
  ${props => props.device.isMobile && css`
    position: fixed;
  `}
`;

так:
const Element = styled.div`
  ${media.mobile`
    position: fixed;
  `}
`;


Конструкция будет использоваться часто, а вся реализация при этом скрыта. Так же, снижена когнитивная нагрузка с человека сопровождающего код. Поэтому использование такого подхода очень разумно.

Если вы пишите простые функции, которые хотите затем использовать, то пишите несколько аргументов. Нет особого смысла переписывать это:
const square = (width, height) => height * width;
В это:
const square = width => height => height * width;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы