Scala函數(shù)式編程

Funtional Programming in Scala

若從學(xué)院派的角度來講,此書對于講解函數(shù)式,或可稱為異端,因?yàn)樗鼪]有冗長晦澀的理論講解與分析;若從學(xué)習(xí)Scala的角度來看,或可視作另類,因?yàn)樗ㄆ獩]有介紹Scala的語法。這是否意味著她兩邊都不討好呢?——非也!這實(shí)際得看讀者的水平和期望。

我不愿意盲目推薦,免得誤人子弟。要閱讀此書,必得具備以下兩個條件。其一是具備一定的Scala知識,尤其是高階函數(shù),模式匹配以及尾遞歸的知識。其二是對函數(shù)式編程滿懷著渴望,并且不拒絕大量的編碼練習(xí)。

閱讀之前,先捫心自問。若不具備這兩個條件,奉勸讀者諸君遠(yuǎn)離此書,免得浪費(fèi)你的時間。

好了,通過這一關(guān),我得努力給您推銷此書的好了。

我其實(shí)深深折服于本書第一章向我們打開的函數(shù)式世界。原來,代碼可以這樣寫。好像口念咒語一般,神奇的魔法打開了異度空間,那里充滿了絢爛、無窮以及未知。其實(shí),這個空間無處不在,只是我們沉迷于面向?qū)ο蟮氖澜?,成為了哥白尼之前的世人,以為面向?qū)ο缶褪浅绦騿T的全部世界。

這一章的案例可以讓我們極度快速的明白函數(shù)的真諦,以及函數(shù)式編程帶來的益處。

雖然是實(shí)踐類的書籍,但它與Martin Odersky的Programming in Scala不同,它或者通過正文或者通過Sidebar或者通過注釋,時時刻刻向讀者傳達(dá)函數(shù)式世界的專有術(shù)語。例如書中提到的pure function、referential transparency(RT)、subsitution model、monads、strictness等概念。這使得對函數(shù)式編程并不了解的讀者,可以通過閱讀本身,擴(kuò)充自己的知識庫,進(jìn)而成為交流的基礎(chǔ)。顯然,這比單純了解某種語言的語法有用許多。

本書的一個特殊之處在于她選擇了Scala庫中的一些設(shè)計(jì)元素作為案例,并以純函數(shù)的方式重新實(shí)現(xiàn),例如實(shí)現(xiàn)了自己的List、Option、Either、Stream等。這種方式有些取巧,實(shí)則恰如其分的找到了一個切入點(diǎn)。因?yàn)樽x者熟悉Scala,故而對這些例子并不陌生,這就降低了學(xué)習(xí)的難度;同時,它又極其符合函數(shù)式編程的特征,且能夠基于這些設(shè)計(jì)元素傳達(dá)函數(shù)式思想;額外的獎勵更是讓讀者更加深入地掌握了Scala的語法本質(zhì);真可謂一舉三得??!

然而,我不得不提醒讀者。若要閱讀此書,需得完成本書的練習(xí)方有收獲。這些練習(xí)就是作者設(shè)置的攔路虎,它讓我們的閱讀變得舉步維艱。坦白說,時至今日,我還在慢慢地閱讀本書的第五章呢。真是“路漫漫其修遠(yuǎn)兮,吾將上下而求索”??!但我能清晰地感覺到自己的變化。就在閱讀完第三章Functional Data Structures后,我感覺自己對模式匹配、泛型、高階函數(shù)有了更深入地理解,也能夠非常自如地運(yùn)用map、flatMap、filter等操作,對List也有了更深入的理解。

雖然閱讀并不順暢,但只要你能看到自己的一點(diǎn)點(diǎn)進(jìn)步,我想一定會有熱情推動著你繼續(xù)閱讀,即使需要排除艱險。讀書未必快樂,然而耽于安逸亦未必賜予你幸福;至少我相信,知識的汲取總會給你回報(bào),這份回報(bào)又豈止是快樂那么簡單!


閱讀建議I

要練習(xí)本書案例,沒有必要使用專業(yè)的IDE。然而,Scala提供的交互式窗口又不太適合我們輸入代碼。當(dāng)然,我們也可以使用諸如Sublime編寫代碼,再到交互式窗口中以:l命令加載代碼文件。可這種交互并不方便。所以,建議大家下載由上海廣談信息技術(shù)有限公司開發(fā)的開源軟件ScalaConsole,它非常適合用來嘗試scala語言特性、標(biāo)準(zhǔn)庫及第三方庫的api使用方法。

閱讀建議II

本書練習(xí)一定要做,雖然某些練習(xí)有些難。大家或許會想,即使做了,我該怎么知道解題是否正確,又或者是否有更好的方案?所幸,本書作者在其github上給出了全書所有練習(xí)的答案,你可以下載它們,作為參考。不過你得忍住誘惑,只有在通過了充分思考,確定解題有難度時,才能閱讀答案,否則就弱化練習(xí)的好處了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容