成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《Java 8函數(shù)式編程》作者Richard Warbourton:Java的亮點(diǎn)不是語言本身

mzlogin / 702人閱讀

摘要:根據(jù)對(duì)社區(qū)和新特性的深刻理解,他創(chuàng)作了函數(shù)式編程一書。問你在倫敦社區(qū)的經(jīng)歷是否幫助你創(chuàng)作了函數(shù)式編程這本書絕對(duì)是這樣。我認(rèn)為引入函數(shù)式編程會(huì)為很多編程任務(wù)提供方便。問之前的是面向?qū)ο蟮?,現(xiàn)在全面支持函數(shù)式編程。

  

非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/199271

Richard Warburton是一位經(jīng)驗(yàn)豐富的技術(shù)專家,善于解決復(fù)雜深?yuàn)W的技術(shù)問題,擁有華威大學(xué)計(jì)算機(jī)科學(xué)專業(yè)博士學(xué)位。近期他一直從事高性能計(jì)算方面的數(shù)據(jù)分析工作。他是英國倫敦Java社區(qū)的領(lǐng)導(dǎo)者,組織過面向Java 8中Lambda表達(dá)式、日期和時(shí)間的Adopt-a-JSR項(xiàng)目,以及Openjdk Hackdays活動(dòng)。Richard還是知名的會(huì)議演講嘉賓,曾在JavaOne、DevoxxUK和JAX London等會(huì)議上演講。根據(jù)對(duì)Java社區(qū)和Java 8新特性的深刻理解,他創(chuàng)作了《Java 8函數(shù)式編程》一書。

問:你是如何成為一位程序員的?又如何成為一位擅長(zhǎng)Java的程序員?

一直以來我都對(duì)科技很感興趣,在學(xué)校的時(shí)候我交友不慎,和程序員群體成為了朋友。能遇見這些可以制作有用又有趣東西的人還是還是很不錯(cuò)的。所以我從一本關(guān)于Visual Basic的書學(xué)起(這是我學(xué)的第一種編程語言),讀完了就開始敲代碼。隨后我發(fā)現(xiàn)Visual Basic作為一種編程語言還有很多讓人不滿的地方,在大學(xué)的時(shí)候,我學(xué)習(xí)了Java。雖然我也用過其他編程語言,但是最終我總是重新回到Java。相比于語言本身,更吸引我的是Java已有的生態(tài)環(huán)境、工具,以及庫。

問:你在倫敦Java社區(qū)的經(jīng)歷是否幫助你創(chuàng)作了《Java 8函數(shù)式編程》這本書?

絕對(duì)是這樣。通過組織倫敦Java社區(qū)“黑客日”關(guān)于Java 8的活動(dòng),我把反饋發(fā)送給了專家組,所以在Java 8正式發(fā)布之前,我就已經(jīng)擺弄過Java 8的原型。同時(shí),我也在倫敦的活動(dòng)中接觸到了O"Reilly,如果沒有倫敦Java社區(qū),《Java 8函數(shù)式編程》這本書就不會(huì)存在。

問:lambda在JVM中是不可見的,為什么沒有通過把lambda做成插件來支持這一語法特性,而是把lambda融合到了Java 8中?

我認(rèn)為這是很多其他關(guān)于Java 8的設(shè)計(jì)決策造成的結(jié)果。他們很早就已經(jīng)確定,不會(huì)增加特殊函數(shù)類型來代表lambda——而是使用具有單一抽象方法的接口(函數(shù)式接口)。一旦如此,任何想要調(diào)用lambda表達(dá)式的庫只要調(diào)用一個(gè)接口的一個(gè)方法就可以了。要實(shí)現(xiàn)這些我們不再需要改變字節(jié)碼。

為了讓lambda工作而搞出一堆技術(shù)結(jié)構(gòu)來是沒有任何意義的,在我共同執(zhí)筆的文章中,我詳述了這個(gè)觀點(diǎn):http://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood。

問:Scala、Groovy及Clojure從根上就有函數(shù)化編程基因,與它們相比Java是否具有哪些獨(dú)特的優(yōu)勢(shì)?

當(dāng)然有,但是亮點(diǎn)不在語言上!Java是一種絕對(duì)可靠的語言,但是像Scala這樣的語言總是可以添加更多的特性。Clojure永遠(yuǎn)都會(huì)更簡(jiǎn)單,語法更少、概念更少。Groovy能夠混合著提供靜態(tài)類型和動(dòng)態(tài)類型,同時(shí)也能提供Java所或缺的腳本處理。相比于Java,所有這些語言都有其獨(dú)特的吸引力,但是同時(shí)它們也缺少很多其他東西。

Java擁有優(yōu)秀而成熟的工具,同時(shí)它對(duì)IDE的支持也是像Scala和Clojure這樣的語言所缺少的。對(duì)于我來說,這些工具對(duì)生產(chǎn)效率的影響和語言本身一樣重要,好的工具可以幫你掃除很多日常開發(fā)中的麻煩。因?yàn)橛羞@些強(qiáng)有力的工具,在很多項(xiàng)目上我都會(huì)優(yōu)先選擇Java,而不是Scala或Clojure。

問:Java的最大優(yōu)勢(shì)在于穩(wěn)定和簡(jiǎn)單,Java 8的函數(shù)化編程以及Java 9的多繼承機(jī)制會(huì)不會(huì)導(dǎo)致Java的復(fù)雜度提升、代碼的維護(hù)度成本提高?

這取決于你看問題的角度。我認(rèn)為引入函數(shù)式編程會(huì)為很多編程任務(wù)提供方便。采集和數(shù)據(jù)處理是Java程序員經(jīng)常需要完成的任務(wù),而函數(shù)式范式是解決這類問題的理想手段。確實(shí),學(xué)習(xí)這些新概念確實(shí)會(huì)造成額外的成本,同樣,當(dāng)你需要決定編寫函數(shù)式代碼還是命令式代碼時(shí)確實(shí)會(huì)增加其復(fù)雜性。所以對(duì)于我來說并沒有一個(gè)絕對(duì)的答案。函數(shù)式編程會(huì)讓問題更簡(jiǎn)單,但是需要學(xué)的還有很多。

問:目前Java生態(tài)對(duì)Java 8函數(shù)式編程的支持情況如何?作為新特性,您預(yù)測(cè)Java 8函數(shù)式編程進(jìn)入全面使用大概還需要多長(zhǎng)時(shí)間?

如果你想要采用Java 8的話,就需要一步一步慢慢來。首先考慮的是和lambda表達(dá)式一起聯(lián)合使用核心庫特征,比如數(shù)據(jù)流(Stream)和采集器(Collector)。我認(rèn)為我們現(xiàn)在已經(jīng)進(jìn)入了逐步采用的階段,我已經(jīng)見到很多人把這些特性用在了真實(shí)的代碼中。

隨著時(shí)間推移,我相信我們即將看到Java演進(jìn)成更具有函數(shù)式風(fēng)格的語言——使用某些函數(shù)式設(shè)計(jì)模式,更多的不可變類。已經(jīng)有一些庫開始采用這樣的樣式。我編寫了一個(gè)測(cè)試框架(http://richardwarburton.github.io/lambda-behave/)作為例子拋磚引玉,還有很多其他東西可以做。

所以我的結(jié)論是最終Java 8的函數(shù)式特性會(huì)得到全面采用,但是這是一個(gè)循序漸進(jìn)的過程。

問:之前的Java是面向?qū)ο蟮?,現(xiàn)在全面支持函數(shù)式編程。作為開發(fā)者,我們需要做出哪些轉(zhuǎn)變才能發(fā)揮函數(shù)式編程的力量?

我認(rèn)為這個(gè)轉(zhuǎn)變需要幾步來完成。

第一步,學(xué)習(xí)更多關(guān)于Java 8的知識(shí)。讀書、讀tutorial,然后嘗試幾個(gè)簡(jiǎn)單的函數(shù)式代碼的例子。掌握了基礎(chǔ)之后,就可以進(jìn)行第二步了。

第二步,在工作項(xiàng)目上使用Java 8。我覺得在一個(gè)低風(fēng)險(xiǎn)的小項(xiàng)目上練一練手確實(shí)不錯(cuò),但是在真實(shí)商業(yè)世界的背景下解決問題效果則更好。一旦你在真實(shí)世界的設(shè)置下熟悉了Java 8,就可以移步到第三步了。

第三步,把所有代碼部署到Java 8上,并在不使用任何Java 8特性的前提下對(duì)其進(jìn)行全面測(cè)試。這樣做是因?yàn)殡m然Java SE維護(hù)了很強(qiáng)大的二進(jìn)制兼容性,但是某些第三方庫可能會(huì)崩潰,那時(shí)你就必須得升級(jí)這些庫。如果你已經(jīng)使用了最新的庫,那么這一步對(duì)你來說就不成問題。一旦萬事俱備,就可以開始第四步了。

第四步,在你整個(gè)主代碼庫上使用Java 8,并且樂在其中。

問:在你使用Java進(jìn)行函數(shù)式編程的過程中,是否有哪些最佳實(shí)踐值得推薦?一路上是否遇到過哪些坑?

我從來都不太喜歡“最佳實(shí)踐”這個(gè)詞,這些東西都是隨著時(shí)間變化的,而且依賴于不同背景。但是我們可以來說一說那些用起來得心應(yīng)手的好東西。

數(shù)據(jù)流(Stream)和采集器(Collector)。如果你編寫的代碼需要采集API,那么這些特性就是你最好的朋友。

不可變數(shù)據(jù)。一般來說,返回新的對(duì)象比改變已有的對(duì)象更簡(jiǎn)單,也更不容易出錯(cuò)。

函數(shù)式思考方式。與其想“我怎么才能升級(jí)這個(gè)Blob的狀態(tài)?”不如問自己:“我怎么才能把這個(gè)輸入轉(zhuǎn)為輸出呢?”

更多精彩,加入圖靈訪談微信!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64354.html

相關(guān)文章

  • 后端好書閱讀與推薦(續(xù)二)

    摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還專門做了一個(gè)小項(xiàng)目,這里就把讀書與小項(xiàng)目過程中的一些心得體會(huì)記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還...

    Jioby 評(píng)論0 收藏0
  • 后端好書閱讀與推薦(續(xù)二)

    摘要:后端好書閱讀與推薦系列文章后端好書閱讀與推薦后端好書閱讀與推薦續(xù)后端好書閱讀與推薦續(xù)二幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還專門做了一個(gè)小項(xiàng)目,這里就把讀書與小項(xiàng)目過程中的一些心得體會(huì)記錄一下。 后端好書閱讀與推薦系列文章:后端好書閱讀與推薦后端好書閱讀與推薦(續(xù))后端好書閱讀與推薦(續(xù)二) 幾個(gè)月又過去了,又讀了幾本書,同時(shí)為了深切體會(huì)到某些書里面的要點(diǎn)還...

    CompileYouth 評(píng)論0 收藏0
  • 后端好書閱讀與推薦

    摘要:后端好書閱讀與推薦這一兩年來養(yǎng)成了買書看書的習(xí)慣,陸陸續(xù)續(xù)也買了幾十本書了,但是一直沒有養(yǎng)成一個(gè)天天看書的習(xí)慣。高級(jí)程序設(shè)計(jì)高級(jí)程序設(shè)計(jì)第版豆瓣有人可能會(huì)有疑問,后端為啥要學(xué)呢其實(shí)就是為了更好的使用做鋪墊。 后端好書閱讀與推薦 這一兩年來養(yǎng)成了買書看書的習(xí)慣,陸陸續(xù)續(xù)也買了幾十本書了,但是一直沒有養(yǎng)成一個(gè)天天看書的習(xí)慣。今天突然想要做個(gè)決定:每天至少花1-3小時(shí)用來看書。這里我準(zhǔn)備把這...

    clasnake 評(píng)論0 收藏0
  • 后端好書閱讀與推薦

    摘要:后端好書閱讀與推薦這一兩年來養(yǎng)成了買書看書的習(xí)慣,陸陸續(xù)續(xù)也買了幾十本書了,但是一直沒有養(yǎng)成一個(gè)天天看書的習(xí)慣。高級(jí)程序設(shè)計(jì)高級(jí)程序設(shè)計(jì)第版豆瓣有人可能會(huì)有疑問,后端為啥要學(xué)呢其實(shí)就是為了更好的使用做鋪墊。 后端好書閱讀與推薦 這一兩年來養(yǎng)成了買書看書的習(xí)慣,陸陸續(xù)續(xù)也買了幾十本書了,但是一直沒有養(yǎng)成一個(gè)天天看書的習(xí)慣。今天突然想要做個(gè)決定:每天至少花1-3小時(shí)用來看書。這里我準(zhǔn)備把這...

    Juven 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

mzlogin

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<