静态方法使Java成为伪函数式语言?

ash*_*aka 7 java closures functional-programming

我一直在考虑Misko Hevery 发表的一篇文章,即Java中的静态方法是可测试性死亡.我不想讨论可测试性问题,而是讨论静态方法的概念.为什么人们如此讨厌它?

确实,我们没有闭包(但我们有一个稍微尴尬的匿名函数),lambda和函数作为第一类对象.在某种程度上,我认为静态方法可以用来模拟作为第一类对象的函数.

elj*_*nso 4

函数式编程的特征之一是数据的不变性。static确实意味着您不需要表示状态的对象(实例),所以这不是一个糟糕的开始。然而,你确实在班级级别上有状态,但你可以做到这一点final。由于(静态)方法根本不是一等函数,因此您仍然需要像匿名类这样丑陋的结构来实现 Java 中某种风格的函数式编程。

函数式编程最好使用函数式语言来完成,因为它具有对高阶函数、不变性、引用透明性等必要的语言支持。

然而,这并不意味着您不能使用像 Java 这样的命令式语言以函数式风格进行编程。还可以给出其他示例。并不是因为您使用 Java 进行编程,所以您就在进行 OOP。goto您可以使用 C++ 等结构化语言使用全局数据和非结构化控制流 ( ) 进行编程。我可以用像Scheme 这样的函数式语言进行OOP。ETC。

Steve McConnell在《Code Complete》(也是关于 SO 的一个非常流行的参考文献)中提到了使用语言编程与使用语言编程区别

所以,简而言之,如果你说“静态方法模仿一等函数”,我不同意。

但是,如果我认为这更多是您想要表达的观点,那么您会说“静态方法可以帮助以 Java 的函数式风格进行编程”,我同意。