javascript - 函数式编程如果
问题描述
我喜欢函数式编程概念,但我认为很多时候代码变得更大更混乱。
例如,如果您有这样的代码(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
在此类情况下是为了完整性,而不是因为在像您的示例这样的情况下使用它而不是三元运算符被认为更具可读性或更好的函数式风格。
推荐阅读
- kotlin - 如何从已经有 main 的 gradle 项目中运行 Kotlin 脚本?
- javascript - 我有两个数组对象,数组 A 有存储组对象,数组 B 有存储对象
- git - 推送时 Git 意外结束 JSON inputB/s
- c# - 在C#中给定字符串段落之前和之后删除字符串
- postgresql - GRPC 有没有办法通知 CRUD 操作流以向客户端提供实时更新?
- python - 有没有办法在 Python 中使用绑定内存?
- reactjs - 使用 React `useCallback` 钩子的依赖项作为回调的参数是否更高效?
- android - 如何在 Android 设备上调试 Delphi 应用程序?
- angular - ngForm 或 [formGroup] 在 formly 包装器中是未知的
- javascript - 行和列布局中的 iframe 显示问题