java - 静态方法使 Java 成为一种伪函数式语言?

标签 java closures functional-programming

我一直在考虑 post Misko Hevery 认为 Java 中的静态方法可测试性已死。我不想讨论可测试性问题,而是更多地讨论静态方法的概念。为什么人们如此讨厌它?

的确,我们没有闭包(但我们有一个有点笨拙的匿名函数)、lambdas 和作为一流对象的函数。在某种程度上,我认为静态方法可用于将函数模拟为一流对象。

最佳答案

函数式编程的一个特点是数据的不变性。 static 确实暗示您不需要表示状态的对象(实例),所以这不是一个糟糕的开始。但是,您在类级别上确实有状态,但是您可以将其设置为 final。由于(静态)方法根本不是一等函数,您仍然需要像匿名类这样的丑陋构造来接近 Java 中某种风格的函数式编程。

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

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

Steve McConnell 在 Code Complete 中提到了语言编程与编程语言的区别(也是 SO 上非常流行的引用)。

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

但是,如果我认为这更像是您试图表达的重点,您会说“静态方法有助于在 Java 中以函数式风格进行编程”,我同意。

关于java - 静态方法使 Java 成为一种伪函数式语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585031/

相关文章:

javascript - 是否可以执行两次匿名函数?

javascript - 为什么我不能在 Javascript 中滚动循环?

c++ - 在 C++ 中建模类型类

java - java 中使用泛型替代抽象静态/静态重写方法

java - play2 在子模块/子项目中使用主项目 View / Controller /模型,反之亦然

java - 我是否必须在 AOSP java 中包含同一包中的类?

java.lang.numberformaexception : invalid double: ""

javascript - 什么时候关闭会导致性能问题

haskell - QuickCheck的promote功能的一般情况是什么?

haskell - 部分应用与模式匹配 : why do these Haskell functions behave differently?