通过在C#中使用更多静态方法,我可以获得函数式编程(F#)的相同好处吗?

Mat*_*tin 7 c# f# static-methods

我承认我还没有弄过F#.但是在30,000英尺的描述中,他们一直在谈论容易测试没有可变状态的代码.这和静态方法一样吗?

我可以通过使用所有静态方法在类中编写一些代码来获得F#的好处吗?

我只是在寻找简短的答案,我知道关于这个主题的全书都存在.

Ant*_*lev 8

绝对不,不变性与静态或实例方法无关.String作为一个不可变类,有很多实例方法,它们以一种非常实用的方式返回一个新的String类实例,而不是修改任何东西.

您可以尝试使用功能分解来模拟F#,但这仍然是非常必要的代码.


Ada*_*ter 8

你当然可以不可思议地编写C#代码,但这与静态函数无关.不变性就像拥有一个结构或对象,只通过复制自身并使副本不同来"改变状态".


Mic*_*lGG 5

除了静态的,功能性的模块与对象之外,你可以尝试通过使用C#3和lambda,LINQ等来获得F#的一些好处.但是,这并没有走得太远.我在F#中发现的好处是:

  • 到处推断
  • 自动泛化(添加类型参数,因此我不必手动将其排序)
  • 容易不变
  • 模块和类之间的轻松混合
  • 类似歧视的工会
  • 模式匹配
  • 嵌套函数(轻量级)
  • 第一类函数(不,C#的命名代理不计算)
  • 一切都是表达
  • 功能组合简单

所以,你可以尝试在C#中做一些这样的事情.其中一些根本不受支持,不起作用.其余的变得非常丑陋,非常快.

所以,如果你远离LINQ和Enumerable扩展的常规路径,你可能最终会陷入痛苦的世界.