使用 Language-ext 在 C# 中进行函数式编程 [关闭]

Posted

技术标签:

【中文标题】使用 Language-ext 在 C# 中进行函数式编程 [关闭]【英文标题】:Functional Programming in C# with Language-ext [closed] 【发布时间】:2021-08-10 17:37:10 【问题描述】:

我最近开始研究一个新的 DotNet Core 项目。我注意到有人(开发人员)在这个项目中使用了 Language-Ext 库。这对我来说是一个新事物,所以我知道它适用于函数式编程。对我来说理解它是很混乱的。我用谷歌搜索并发现了它的好处(函数式编程):

    少代码(要点) 更轻松的调试 更轻松的测试

对于 OO 程序员来说,函数式编程是完全不同的。所以,我的问题是我们真的需要在 C# 中使用 Language-Ext(函数式编程)吗?我还缺少什么其他好处吗?

【问题讨论】:

如果您真的想进行函数式编程并将其用作类库,您总是可以使用 F# 在您的解决方案中创建一个项目... 【参考方案1】:

“我们真的需要在 C# 中使用 Language-Ext(函数式编程)吗?”

当然不是;看起来有些人选择这样做;这是 IMO 中极少数的 C# 用户。如果您想要采用函数式风格,您可能会考虑 F#(虽然 C# 确实为函数式编程提供了一些小的认可,但它不是该语言的专长)。如果 language-ext 只添加了您想要的更多内容……太好了?但这完全是主观的和上下文相关的。

【讨论】:

【参考方案2】:

那么,我的问题是我们真的需要在 C# 中使用 Language-Ext(函数式编程)吗?

如果您想在 C# 中进行函数式编程,则不需要 LanguageExt,但 IMO 这是此用例的最佳库。

我还缺少什么其他好处吗?

我有偏见,因为我使用 LanguageExt 已经有几年了,它是我最喜欢的库。如果我在没有这个库的情况下创建/编辑 C# 项目,感觉有点像使用古老的 C# 版本。

还有什么好处?

摆脱(许多1)错误 摆脱大量样板代码 不可变数据类型 避免副作用(更轻松的并行处理) 更容易重构 更多类型安全 可以与非 FP C# 代码结合使用(在有用的地方使用) 更好的重构技能(换个角度)

LanguageExt 创建者 Paul Louth 做了一个很棒的介绍,展示了一些好处: https://github.com/louthy/language-ext

这个库现在有更多的特性,如果你进入这个(以及函数式编程)你会发现很多宝石。

(前提是你想继续使用 C#——而不是使用 F# 或 Haskell 或 ...)

【讨论】:

以上是关于使用 Language-ext 在 C# 中进行函数式编程 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Language-ext 在 Try<IEnumerable<Try<...>>> 时聚合异常/失败

C# 调用具有不同类型的相同扩展函​​数作为参数(可能是委托?)

无法在 C# 中更新 UI 组件

C#如何封装字段

第二次作业

如何使用 C# 检测不存在的设备