【发布时间】:2012-01-08 15:47:51
【问题描述】:
我对函数式编程的深入研究越多,我就阅读了支持静态方法而不是非静态方法的建议。您可以在本书中阅读该建议,例如:
http://www.amazon.de/Functional-Programming-Techniques-Projects-Programmer/dp/0470744588
如果您考虑功能纯度,那当然是有道理的。一个静态函数站在那里说:“我不需要任何状态!”
但是,这对可测试性有何影响?我的意思是,一个有很多静态方法的系统是不是很难测试(因为静态方法很难模拟)?或者模拟在函数式编程中是否扮演次要角色?如果是:为什么?
编辑
因为有人怀疑这本书是否真的提出了这个建议。我会多引用一点。我希望 Oliver Sturm 没问题。
使用静态方法
静态方法是值得考虑作为一般准则的基本思想之一。许多面向对象的程序员都支持它,从功能的角度来看,大多数时候可以将函数设为静态。任何纯函数都可以设为静态。 (...)
有些人可能会争辩说,始终传递所有参数的想法意味着您没有尽可能多地利用面向对象的想法。这实际上可能是正确的,但也许是因为面向对象的概念没有像应有的那样考虑并行执行的问题。 (...)
最后,推荐一个准则:当您编写的方法不需要访问其所在类中的任何字段时,请将其设为静态!
顺便说一句,到目前为止已经有了很好的答案。谢谢!
【问题讨论】:
-
事实上,我全心全意地反对,偏爱静态方法会使代码更实用。首先,静态方法当然可以像实例方法可以修改每个对象的状态一样轻松地修改静态状态 - 更改静态状态更糟糕,因为这是一个全局更改,不仅影响单个对象。其次,没有理由使用不修改任何状态的静态方法比使用不修改任何状态的非静态方法更有效。
标签: c# unit-testing functional-programming