Java 8 Lambdas –缺少脱离Java的链接
我學習了函數式編程,但是后來我決定我更喜歡命令式編程,于是我轉回去。
—沒人
從命令式編程過渡到函數式編程是當今非常普遍的事情。 互聯網上的博客文章充斥著關于它的證詞。 我讀過的所有內容以及與我交談過的每個人(包括我自己)都有相同的故事。 一旦他們開始函數式編程,就不會再回頭了。 他們喜歡它,在早期,即使他們學到的很少,他們也渴望
學到更多。
在我看來,從命令式編程到函數式編程是交通繁忙的必經之路。 這是一個二極管,兩端有一百萬伏特的電壓。 這是自來水管道上的止回閥。 您不僅不能回頭,而且還帶有無法抗拒的探索和學習更多知識的欲望,這使您進一步進入函數式編程。
Java 8 Lambdas
隨著Java 8 lambda的到來,這為地球上最大的一組開發人員之一帶來了一個有趣的轉折點。 Lambda本身不一定等同于函數式編程。 但是他們確實啟用了它。 隨著這里的開發人員開始涉足函數式編程(那里是庫維護者),我們將開始看到Java源代碼中的一些新事物。 以前可能返回null將開始返回Optional 。 執行IO的庫(例如HTTP客戶端庫)將開始返回CompletableFuture 。 越來越多的功能概念將開始滲透到Java接口中,將有稱為fold,map,reduce,collect的方法。 因此,這將開始Java大眾從命令式編程過渡到函數式編程的單一方式。
但是Java是否可以滿足他們的需求? 看著Lambda規格,我懷疑不是。 我在Lambda規范中看到了一個天才的精髓,它使Lambdas可以立即使用許多現有的庫,而無需進行任何更改。 這是因為Lambda只是用于實現單抽象方法(SAM)接口的語法糖。 在Java中,隨處可見SAM,從并Callable中的Runnable和Callable到Swing中的ActionListener ,再到Guava中的Function和Supplier ,列表將不勝枚舉。 所有這些庫今天都已準備就緒。
但是,這也帶來了問題。 開始編寫事物時,函數式編程會變得很有趣。 傳遞函數并將它們組合在一起的能力提供了強大的功能-但是Java 8 Lambda并不是可組合的。 Java 8確實提供了Future SAM,但是Guava和許多其他庫也提供了。 要將它們組合在一起,您需要組合方法的所有排列。 至少,不是以傳統的Java方式,兩個相同類型的SAM甚至都不是很容易組成,因為您不能向SAM添加任何方法(例如map或transform方法)來進行合成。
因此,如果沒有能力執行最基本的功能概念之一(組成功能),Java能否成為一種功能語言? 也許有一些我沒有想到的創造性方法可以解決這個問題。 也許并不需要,我認為Java 8 Lambda的設計者無意將Java變成一種功能語言,因此您不能將其稱為Lambda規范的錯誤。 但是問題是,正如我早先指出的那樣,對函數式編程有所了解的開發人員將想要更多,并且想要更快。 即使Java可以成為一種功能語言,我也認為它不會跟上Java開發人員向功能編程的發展。
所以我要做個預測。 Java 8 Lambdas將被急切采用。 如此急切地將Java本身拋在后面,并且大多數Java開發人員將轉向一種能夠滿足他們需求的語言,因為他們迫切需要新的函數式程序員。
哪種語言?
在推測Java開發人員將使用哪種語言之前,首先讓我確定一下我既有偏見又無知。 我為Typesafe工作,因此顯然偏向于Scala。 除了在大學與Haskell和ML一起玩之外,我從沒有在生氣時使用任何其他功能性語言。 因此,我一言不發,如果您不同意,請撰寫自己的博客文章。
Scala作為一種過渡語言
因此,首先,我認為Scala為命令式程序員切換到函數式編程提供了一種很棒的過渡語言。 對Java 8 Lambdas的函數式編程有所了解之后,Java開發人員會發現自己在Scala中非常滿意。 他們仍然可以按照以前的方式進行所有操作,擁有vars和mutable集合,并且掌握了所有標準的Java庫。 當然,他們可以開始加深對函數式編程的了解。 因此,Scala提供了從命令式編程到函數式編程的平穩過渡,您可以根據需要快速或緩慢地采用函數式編程。
Scala作為目標語言
過渡到函數式編程后,開發人員會留在Scala,還是會像從Java遷移一樣繼續尋找更純凈的語言? 我的意見是不。 從廣義上講,我看到了函數式編程社區中的兩個陣營。 第一個陣營將功能編程視為必須遵循的一組法律。 對于這個營地,Scala有很多不必要和/或危險的事情,他們可能不會將Scala視為最終目的地。
第二個陣營將函數式編程視為應被廣泛利用的強大工具,而不是必須遵循的一組法律。 我站在這里,Scala很好地滿足了該營地的需求。 函數式編程在Scala中提供了一流的支持,但您總是可以在需要時退回到當務之急。 我懷疑大多數Java社區都傾向于加入這一陣營,否則,他們將已經回避Java并編寫Haskell。 因此,我認為Java 8 Lambda對于Scala將會非常有用,因為它們使Java開發人員可以了解Scala將為他們做些什么,從而將大量精力集中到Scala開發中。
參考: Java 8 Lambdas – James and Beth Roper的博客博客中缺少我們的JCG合作伙伴 James Roper 離開Java 的鏈接 。
翻譯自: https://www.javacodegeeks.com/2013/04/java-8-lambdas-the-missing-link-to-moving-away-from-java.html
總結
以上是生活随笔為你收集整理的Java 8 Lambdas –缺少脱离Java的链接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos解决(ddos异常清理)
- 下一篇: 在集成测试中模拟耗时的动作