javascript - 函数式编程如果

标签 javascript functional-programming

我喜欢函数式编程概念,但我认为很多时候代码会变得更大、更困惑。

例如,如果您有这样的代码(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 样式比命令式代码更长。

最佳答案

三元运算符函数式编程风格。它不仅仅是一个命令式语句,它还是一个表达式。它返回一个结果值,并且不依赖副作用来工作。每种函数式编程语言都有类似的东西,包括像 Haskell 这样的“超纯”语言。

使用三元运算符唯一不能做的函数式操作是将其传递到高阶函数或从高阶函数返回它。假设出于某种奇怪的原因,您有一个高阶函数,例如:

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

您可以调用runAdminFunction(F.if),但不能调用runAdminFunction(?)。函数式编程库具有 F.if 是为了在此类情况下保持完整性,而不是因为在像您的示例这样的情况下使用它比三元运算符更具可读性或更好的函数式风格。

关于javascript - 函数式编程如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901718/

相关文章:

Haskell 反向代理问题

scala - Monads 在实践中作为 Monoids

functional-programming - 如何积累 Observable

javascript - 如何在谷歌应用程序引擎项目中包含.js文件

function - 这个 Lisp 函数有什么问题?

javascript - ECMAScript 6 的 function.name 属性

JavaScript:在 Vue.js 模式中获取 DOM 元素

recursion - 实现最后一个非零而不延续

javascript - 从 javascript 发送 DataTables 中的 JSON 对象

javascript - 如何在不使用 window.navigator 的情况下可靠地检测浏览器?