java - Java 7 中的函数式编程

标签 java functional-programming

<分区>

Java 7 是否支持函数式编程,或者我仍然需要使用 FunctionalJava 或其他库?我认为对此有支持,但没有找到太多关于它的信息。

最佳答案

这取决于您对函数式编程的定义。

无论如何,您的问题的答案是否定的。Lambda 应该在某一时刻出现在 Java7 中,但它们只会出现在 Java8 中。 看起来使用 Java8 您将能够 do a lot with the new lambda notation in conjunction with the regular JDK8 class libraries (特别是集合)在你需要像 FunctionalJava 这样的东西之前,但这取决于你想做多少。很多 OO 人会非常喜欢 FP 的味道——一个常见的例子是带有 mapfilter 等的集合。这本身无疑会插入 Java < em>更接近 FP - 可能只是 FP 就足够了。

问题是,即便如此,Java 中是否允许真正的(即使“不纯”)函数式编程?是,也不是。,因为理论上任何具有词法闭包和 lambda 符号的语言都足够了。 ,因为 FP 受语言 HaskellF#OCAMLScala 支持仍然不切实际。

一些例子:

  1. 缺少Algebraic Data Types - 这些被视为 FP 语言的静态类型家族,特别适用于许多 FP 习语。
  2. 虽然不完全是 FP 的要求,但几乎所有静态类型的 FP 语言都具有 某种形式的类型推断
  3. 对于很多函数式编程,语句需要表现得像表达式 方便的成语 - iftry 等需要返回一个值
  4. 强制执行(如在 Haskell 中),或鼓励(如在 Scala 中) 单一赋值以及不变性,以及一个有用的集合 为此目的的数据结构和库。

其他语言如 Lisp/Scheme 或 Erlang 也被认为是函数式的;但在较不严格的意义上;要求 (1) 和 (2) 不适用,因为它们一开始就是动态类型

然后可以说,Javascript 的功能与 Lisp(非纯动态函数式语言)差不多,因为 Javascript 一直具有 lambda 和一等函数。但是 Java 属于静态类型家族,并没有比 Javascript 更好,而且肯定不如现有的静态类型 FP 语言。

关于 (4. (Immutable/Side-effect free)),似乎在 JDK8 中,现有的可变类将被 改造 使用 lambda 消耗方法,所以这将(在至少暂时)限制您在 Java8 中采用 FP 范式的程度。

我发现这些链接非常有用 - 虽然我已经有一段时间没有跟进了,所以我不确定它们是否是这方面的最佳/最新信息。但值得一读:

http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html

http://cr.openjdk.java.net/~briangoetz/lambda/collections-overview.html

关于java - Java 7 中的函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13617705/

相关文章:

ios - swift : How to refactor my code using more elegant approach?

javascript - 我怎样才能将这些功能安排为高阶

java - Erlang 和 Java 接口(interface)

haskell - 是否有带有显式子类型的 ADT 名称?

java - 如何采取第二个 Action 来移动棋子?

java - Spring Data Neo4j 4 中的动态属性

java - 无法将我的项目部署到我之前部署在 glassfish 上的 tomcat 上

java - gradlew构建失败并给我这个,任务 ':test'的执行失败

api - 使用 Clojure 发出多个 API 请求的功能方法

java - Proguard混淆Fat jar