13

我想在我将要教授的课程中使用函数式 Java 或 Guava(或者不太可能的 Scala)。尽管有许多在 JVM 上运行的函数式语言,但我想坚持一些看起来尽可能像 Java 的东西,即在概念上和句法上与 Java 8 中预期的功能特性最兼容的东西.

看起来函数式 JavaGuava是最好的候选者。在功能、易用性、概念上与纯 Java 的接近性等方面,我找不到任何可以比较它们的东西。有人知道这些库之间的良好比较吗?

4

3 回答 3

17

Guava 的目标不是在 Java 中提供函数式惯用语。从功能解释番石榴维基页面:

过度使用 Guava 的函数式编程习惯会导致冗长、混乱、不可读和低效的代码。到目前为止,这些是 Guava 中最容易(也是最常见)被滥用的部分,当你为了让你的代码“单行”而竭尽全力时,Guava 团队会哭泣。

请确保,在使用 Guava 的功能实用程序时,传统的命令式做事方式并不更具可读性。试着写出来。有那么糟糕吗?这是否比您即将尝试的荒谬笨拙的功能方法更具可读性?

过度依赖函数式惯用语在 Java 7 中没有太大意义,因为开销太高(请参阅垂直问题)。这将随着 Java 8 而改变,这将改变 Java 库和程序在细节级别上的设计方式。在 Java 7 中有意义的事情在 Java 8 中会在一定程度上不鼓励。这将激发新版本的 Effective Java 和许多新的 API。

如果您正在尝试教授函数式编程,那么坚持(或多或少)纯函数式语言可能会更好。FP 和 OOP 的混合(或仿真)的每种语言都会分散注意力。

于 2011-12-23T05:31:39.733 回答
6

As stated above, Guava is just a Java library -- a Java 5 compatible library, even (as of release 11). The position of Guava on functional programming is summed up by Kevin Bourrillion:

“The syntax sucks. At the same time, this stuff is now, has always been and will always be nothing but a stopgap measure until the right language change can come along, at which time we can finally really decide on the optimal syntax and have functional-style programming start actually making lives better in Java for once. So I’m undecided how much effort to put into the Function/Predicate stuff; it’s in the library more because it sort of had to be, not so much because we think it’s a crown jewel.”</p>

于 2011-12-23T10:50:39.140 回答
4

由于 Guava 更像是一个恰好具有函数式惯用语的通用库,而 Functional Java 纯粹是关于在 Java 中实现函数式惯用语,因此,Functional Java 听起来更适合可能更完整的类似 FP 的特性集。

另一方面,我更喜欢 Guava ,因为它更通用,因此我发现自己使用了一些与功能习语无关的特性。

这两个库的问题之一(如上述帖子中 Guava 的 Wiki 所述)是功能对象的匿名内部类的“垂直噪音”。另一个试图通过注释和 APT 解决此问题的库是Jedi

另一种使上述任何库(Guava、FJ 或 Jedi)在没有注释的情况下减少噪音的方法是我编写的库Funcito,其灵感来自 Mockito 的语法。在这一点上它可以简化的内容更加有限,基本上是包装单个方法调用,但这就是我目前发现自己大部分时间都在做的事情。

于 2012-02-06T23:45:02.953 回答