Functional Java和Guava之间有很好的比较吗?

时间:2011-12-22 20:16:29

标签: java functional-programming guava functional-java

我想在我将要教授的课程中使用Functional Java或Guava(或者不太可能使用Scala)。尽管在JVM上运行了许多函数式语言,但我仍然希望坚持使用尽可能类似于Java的东西,即在Java 8中预期的功能特性,在概念和语法上最兼容的东西。

看起来Functional JavaGuava是最佳候选人。我无法在功能,易用性,概念接近直接Java等方面找到任何比较它们的东西。有没有人知道这些库之间的良好比较?

3 个答案:

答案 0 :(得分:17)

Guava的目标不是在Java中提供功能习语。来自Functional Explained 番石榴维基页面:

  

过度使用Guava的函数式编程习语可能导致   冗长,混乱,不可读和低效的代码。到目前为止   番石榴最容易(也是最常见)滥用的部分,何时   你去做荒谬的长度,使你的代码“一个单行”,   番石榴队哭了。

     

请确保在使用Guava的功能实用程序时,   传统的命令式做事方式更具可读性。尝试   写出来。真是太糟糕了吗?这比那个更具可读性   你准备尝试的那种荒谬的功能性方法?

过分依赖功能习惯对Java 7来说没有多大意义,因为开销过高(参见vertical problem)。这将随Java 8而改变,这将改变Java库和程序在详细级别上的设计方式。在Java 8中,在某种程度上不鼓励Java中有意义的事情。这将激发新版的Effective Java和许多新的API。

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

答案 1 :(得分:6)

如上所述,Guava只是一个Java库 - 一个Java 5兼容的库,甚至(从版本11开始)。关于函数式编程的番石榴的位置由Kevin Bourrillion总结:

“语法很糟糕。与此同时,这些东西现在,一直都是,并且将永远只是一个权宜之计,直到正确的语言变化出现,此时我们终于可以真正决定最佳语法并开始功能式编程实际上,在Java中让生活变得更好。所以我决定投入功能/谓词的工作量是多少;它更像是在图书馆,因为它必须是,而不是因为我们认为它是皇冠上的宝石。“

答案 2 :(得分:4)

由于Guava更像是一个具有功能惯用语的通用库,而Functional Java纯粹是关于在Java中实现功能习惯用法,因此功能Java听起来更像是一个更完整的FP类功能。

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

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

另一种使上述任何库(Guava,FJ或Jedi)在没有注释的情况下噪音较低的方法是我写的一个库,Funcito,受到Mockito语法的启发。它在这一点上可以简化得更加局限,基本上包含单个方法调用,但这是我目前在大部分时间里都在做的事情。