簡體   English   中英

Functional Java和Guava之間有很好的比較嗎?

[英]Is there a good comparison between Functional Java and Guava?

我想在我將要教授的課程中使用Functional Java或Guava(或者不太可能使用Scala)。 盡管在JVM上運行了許多函數式語言,但我仍然希望堅持使用盡可能類似於Java的東西,即在Java 8中預期的功能特性,在概念和語法上最兼容的東西。 。

它看起來像Functional JavaGuava是最好的候選者。 我無法在功能,易用性,概念接近直接Java等方面找到任何比較它們的東西。有沒有人知道這些庫之間的良好比較?

Guava的目標不是在Java中提供功能習語。 Functional Explained Guava wiki頁面:

過度使用Guava的函數式編程習語會導致冗長,混亂,難以理解和低效的代碼。 這些是迄今為止最容易(也是最常見)被濫用的番石榴部分,當你為了使你的代碼“單線”而荒謬的長度時,番石榴團隊就會哭泣。

在使用Guava的功能實用程序時,請確保傳統的命令式處理方式不易讀取。 試着把它寫出來。 真是太糟糕了嗎? 那比你想要嘗試的荒謬笨拙的功能方法更具可讀性嗎?

由於開銷過高(參見垂直問題 ),因此過度依賴功能習語對Java 7沒有多大意義。 這將隨Java 8而改變,這將改變Java庫和程序在詳細級別上的設計方式。 在Java 8中,在某種程度上不鼓勵Java中有意義的事情。這將激發新版的Effective Java和許多新的API。

如果您正在嘗試教授函數式編程,那么最好堅持使用(或多或少)純函數式語言。 每種語言都是FP和OOP的混合(或仿真)會分散注意力。

如上所述,Guava只是一個Java庫 - 一個Java 5兼容的庫,甚至(從版本11開始)。 Kaava對函數式編程的定位由Kevin Bourrillion總結:

“語法很糟糕。 與此同時,這些東西現在,一直都是,並且將永遠只是一個權宜之計,直到正確的語言變化出現,此時我們終於可以真正決定最佳語法並開始功能式編程實際上,在Java中讓生活變得更好。 所以我決定投入功能/謂詞的工作量是多少; 它更像是在圖書館,因為它必須是,而不是因為我們認為它是一個皇冠上的寶石。“

由於Guava更像是一個具有功能慣用語的通用庫,而Functional Java純粹是關於在Java中實現功能習慣用法,因此功能Java聽起來更像是一個更完整的FP類功能。

另一方面,我更喜歡Guava, 因為它更通用,因此我發現自己使用了幾個與功能習語無關的功能。

兩個庫中的一個問題(如上面帖子中的Guava Wiki所述)是功能對象的匿名內部類的“垂直噪聲”。 另一個嘗試通過注釋和APT修復此問題的庫是Jedi

如果沒有注釋,使上述任何庫(Guava,FJ或Jedi)的噪聲較小的另一種方法是我寫的一個庫, Funcito ,受到Mockito語法的啟發。 它在這一點上可以簡化得更加局限,基本上包含單個方法調用,但這是我目前已經發現的大部分時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM