lambdas for_Java 8 Lambdas –缺少脱离Java的链接
lambdas for
我學(xué)習(xí)了函數(shù)式編程,但是后來我決定我更喜歡命令式編程,于是我轉(zhuǎn)回去。
—沒人
從命令式編程過渡到函數(shù)式編程是當(dāng)今非常普遍的事情。 互聯(lián)網(wǎng)上的博客文章充斥著關(guān)于它的證詞。 我讀過的所有內(nèi)容以及與我交談過的每個人(包括我自己)都有相同的故事。 一旦他們開始函數(shù)式編程,就不會再回頭了。 他們喜歡它,在早期,即使他們學(xué)到的很少,他們也渴望
學(xué)到更多。
在我看來,從命令式編程過渡到函數(shù)式編程是交通繁忙的必經(jīng)之路。 它是一個二極管,兩端有一百萬伏特的電壓。 這是自來水管道上的止回閥。 您不僅不能回頭,而且還帶有無法抗拒的探索和學(xué)習(xí)更多知識的欲望,這使您進(jìn)一步進(jìn)入函數(shù)式編程。
Java 8 Lambdas
隨著Java 8 lambda的到來,這為地球上最大的一組開發(fā)人員之一帶來了一個有趣的轉(zhuǎn)折點。 Lambda本身不一定等同于函數(shù)式編程。 但是他們確實啟用了它。 當(dāng)這里的開發(fā)人員開始涉足函數(shù)式編程(那里是庫維護(hù)者)時,我們將開始看到Java源代碼中的一些新事物。 以前可能返回null將開始返回Optional 。 執(zhí)行IO的庫(例如HTTP客戶端庫)將開始返回CompletableFuture 。 越來越多的功能概念將開始滲透到Java接口中,將有稱為fold,map,reduce,collect的方法。 因此,這將成為Java大眾從命令式編程向函數(shù)式編程過渡的一條途徑。
但是Java是否可以滿足他們的需求? 看著Lambda規(guī)格,我懷疑不是。 我在Lambda規(guī)范中看到了一個天才的精髓,它使Lambdas可以立即使用許多現(xiàn)有的庫,而無需進(jìn)行任何更改。 這是因為Lambda只是用于實現(xiàn)單抽象方法(SAM)接口的語法糖。 在Java中,隨處可見SAM,從并Callable中的Runnable和Callable到Swing中的ActionListener ,再到Guava中的Function和Supplier ,列表將不勝枚舉。 所有這些庫現(xiàn)在都已準(zhǔn)備就緒。
但是,這也帶來了問題。 開始編寫事物時,函數(shù)式編程會變得很有趣。 傳遞函數(shù)并將它們組合在一起的能力提供了強(qiáng)大的功能-但是Java 8 Lambda并不是可組合的。 Java 8確實提供了Future SAM,但是Guava和許多其他庫也提供了。 為了將它們組合在一起,您需要組合方法的所有排列。 至少,不是以傳統(tǒng)的Java方式,兩個相同類型的SAM甚至都不是很容易組成,因為您無法向SAM添加任何方法(例如map或transform方法)來進(jìn)行合成。
因此,如果沒有能力執(zhí)行最基本的功能概念之一(組成功能),Java能否成為一種功能語言? 也許有一些我沒有想到的創(chuàng)造性方法可以解決這個問題。 也許并不需要,我認(rèn)為Java 8 Lambda的設(shè)計者無意將Java變成功能語言,因此您不能將其稱為Lambda規(guī)范的錯誤。 但是問題是,正如我早先指出的那樣,對函數(shù)式編程有所了解的開發(fā)人員將需要更多,并且需要更快。 即使Java可以成為一種功能語言,我也認(rèn)為它不會跟上Java開發(fā)人員向功能編程的發(fā)展。
所以我要做個預(yù)測。 Java 8 Lambdas將被急切采用。 如此急切地將Java本身拋在后面,并且大多數(shù)Java開發(fā)人員將轉(zhuǎn)向一種能夠滿足他們需求的語言,因為他們迫切需要新的函數(shù)式程序員。
哪種語言?
在推測Java開發(fā)人員將使用哪種語言之前,讓我首先確定一下我既有偏見又無知。 我為Typesafe工作,因此顯然偏向于Scala。 除了在大學(xué)與Haskell和ML一起玩之外,我從沒有在生氣時使用任何其他功能性語言。 因此,我一言不發(fā),如果您不同意,請撰寫自己的博客文章。
Scala作為一種過渡語言
因此,首先,我認(rèn)為Scala為命令式程序員切換到函數(shù)式編程提供了一種很棒的過渡語言。 對Java 8 Lambdas的函數(shù)式編程有所了解后,Java開發(fā)人員會發(fā)現(xiàn)自己在Scala中非常滿意。 他們?nèi)匀豢梢园凑找郧暗姆绞竭M(jìn)行所有操作,擁有vars和mutable集合,并且掌握了所有標(biāo)準(zhǔn)的Java庫。 當(dāng)然,他們可以開始加深對函數(shù)式編程的了解。 因此,Scala提供了從命令式編程到函數(shù)式編程的平穩(wěn)過渡,您可以根據(jù)需要快速或緩慢地采用函數(shù)式編程。
Scala作為目標(biāo)語言
過渡到函數(shù)式編程后,開發(fā)人員會留在Scala,還是像Java一樣繼續(xù)尋找更純凈的語言? 我的意見是不。 從廣義上講,我看到了函數(shù)式編程社區(qū)中的兩個陣營。 第一個陣營將功能編程視為必須遵循的一組法律。 對于這個營地,Scala有很多不必要和/或危險的事情,他們可能不會將Scala視為最終目的地。
第二陣營將函數(shù)式編程視為應(yīng)被廣泛利用的強(qiáng)大工具,而不是必須遵循的一組法律。 我站在這里,Scala很好地滿足了該營地的需求。 函數(shù)式編程在Scala中提供了一流的支持,但您總是可以在必要時退回當(dāng)務(wù)之急。 我懷疑大多數(shù)Java社區(qū)都傾向于加入這一陣營,否則,他們將已經(jīng)回避Java并編寫Haskell。 因此,我認(rèn)為Java 8 Lambda對于Scala將會非常有用,因為它們使Java開發(fā)人員可以了解Scala將為他們做些什么,從而將大量精力集中到Scala開發(fā)中。
參考: 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
lambdas for
總結(jié)
以上是生活随笔為你收集整理的lambdas for_Java 8 Lambdas –缺少脱离Java的链接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 所得税优惠备案取消规定(所得税优惠备案)
- 下一篇: DDOS攻击防御(精准防御ddos攻击)