Функциональное программирование If - PullRequest
0 голосов
/ 05 июля 2019

Мне нравятся концепции функционального программирования, но я думаю, что большую часть времени код становится больше и грязнее.

Например, если у вас есть такой код (JS):

let str = user.status == 'is_admin' ? 'active user' : 'user inactive';

Очень сложно сделать это в стиле FP с меньшей или похожей длиной кода.

Например, в псевдо-библиотеке FP:

let str = F.if(F.propEq('status', 'is_admin'), 'active user', 'user inactive'))(user)

Но вы видите на ~ 10 символов больше, чем императивный стиль.

У вас есть предложения, если его можно сократить?

Код является просто примером, но я заметил, что во многих случаях стиль FP становится длиннее императивного кода.

1 Ответ

4 голосов
/ 08 июля 2019

Тернарный оператор является функциональным стилем программирования. Это не просто обязательное утверждение, это выражение . Он возвращает значение результата и не полагается на побочные эффекты, чтобы работать. Каждый функциональный язык программирования имеет что-то похожее, в том числе «ультрачистые», такие как Haskell.

Единственная функциональная вещь, которую вы не можете сделать с тернарным оператором, - это передать его или вернуть из функции более высокого порядка. Скажем, по какой-то странной причине у вас была функция высшего порядка, например:

function runAdminFunction(f) {
  return f(is_admin, 'active user', 'user inactive');
}

Вы можете позвонить runAdminFunction(F.if), но не можете позвонить runAdminFunction(?). Библиотеки функционального программирования имеют F.if для полноты в подобных ситуациях, а не потому, что считается более читабельным или лучшим функциональным стилем для использования его над троичным оператором в ситуациях, подобных вашему примеру.

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