《Scala程序設(shè)計(jì)》閱讀書摘

JVM語言

JVM上的語言越來越多了,從前幾年的groovy仲翎、Scala和Clojure谭确,現(xiàn)在又聽說一門Kotlin票渠。對于前三種語言,groovy算是JVM平臺上的動(dòng)態(tài)腳本語言昂秃,可以類比Python肠骆;Scala以其直逼C++的語言復(fù)雜度而出名蚀腿,但是該語言的流行是因?yàn)楦卟l(fā)(akka)和大數(shù)據(jù)處理(Spark)扫外;Clojure是JVM上的Lisp重現(xiàn),是純粹的函數(shù)式編程語言磁玉,它在實(shí)時(shí)計(jì)算(Strom)中承擔(dān)了一部分責(zé)任驾讲。

選擇Scala

我決定了解Scala的原因是高并發(fā)吮铭,以及它與Java具備良好的互操作性,因此我試圖在將來的項(xiàng)目中引入Scala掠拳,讓其負(fù)責(zé)項(xiàng)目的并發(fā)處理模塊碳想。

Scala令我刮目相看的地方還有,很多語言特性的設(shè)計(jì)就會讓你不自覺使用一些設(shè)計(jì)模式胧奔,或者說根本不需要設(shè)計(jì)模式龙填。例如:利用Trait可以輕易實(shí)現(xiàn)裝飾器模式岩遗、利用函數(shù)值可以輕易實(shí)現(xiàn)策略模式等宿礁。

在《Scala程序設(shè)計(jì)》這本書中,作者給出了Scala的幾個(gè)重要特性:

  • 擁有基于事件的并發(fā)模型(從2.10+版本中開始轉(zhuǎn)向akka)
  • 既支持命令式風(fēng)格控汉,又支持函數(shù)式風(fēng)格
  • 是純面向?qū)ο蟮?/li>
  • 可以很好得與Java混合
  • 它強(qiáng)制使用自適應(yīng)靜態(tài)類型
  • 它簡潔而有表現(xiàn)力
  • 它構(gòu)建于一個(gè)微內(nèi)核之上

但是 Scala為什么在國內(nèi)不太火呢姑子?據(jù)說是復(fù)雜度太高街佑,黑魔法太多捍靠,導(dǎo)致學(xué)習(xí)曲線過于陡峭沐旨,對此我的看法是:Scala是一門密度很高的語言,它的作者好像很懶剂公,還是煩透了Java那過于冗余的代碼風(fēng)格希俩,Scala完全是為了少寫代碼而設(shè)計(jì)吊宋。我們在使用Scala的一些語法糖的時(shí)候纲辽,應(yīng)該兼顧可讀性,在不影響可讀性的情況下使用Scala的黑魔法璃搜。

團(tuán)隊(duì)在推廣使用Scala之前拖吼,要首先學(xué)習(xí)它的語言規(guī)范(官方的沒有?那就制定團(tuán)隊(duì)自己的)这吻,這時(shí)可以參考Effective Scala

本書主要內(nèi)容

通過前面的論述吊档,相比你也明白自己是否會選擇Scala了,跟隨下面的列表唾糯,可以大概了解下Scala的具體內(nèi)容了。

  1. ?類型推導(dǎo):Scala不同于其他靜態(tài)類型語言仔燕,它不要求開發(fā)者提供冗余的類型信息姻乓,定義變量的時(shí)候使用var和val学少,但是scalac會進(jìn)行類型推導(dǎo)禁偎,檢查類型引用是否得當(dāng)。這點(diǎn)使得Scala既有動(dòng)態(tài)語言的自由,又能在編譯時(shí)發(fā)現(xiàn)不少類型錯(cuò)誤枷遂。

  2. 函數(shù)值和閉包:函數(shù)可以當(dāng)作參數(shù)傳遞給函數(shù)沸移,可以從函數(shù)中返回,甚至可以在函數(shù)中嵌套辉哥,這些高階函數(shù)稱之為函數(shù)值閉包是一種特殊的函數(shù)值,閉包中封閉或綁定了在另一個(gè)作用域獲上下文中定義的變量。

  3. Trait和類型轉(zhuǎn)換:Trait就像一個(gè)擁有部分實(shí)現(xiàn)的接口,它提供了一個(gè)介于單一繼承和多重繼承的中間地帶福青,我們可以在某個(gè)對象實(shí)例中混入某些Trait祝谚,也可以在某個(gè)類的所有實(shí)例中混入。通過Trait可以輕易實(shí)現(xiàn)設(shè)計(jì)模式中的裝飾器模式意荤。

  4. Scala的容器:Scala提供了常用的容器——List、Map和Set捐寥,其中List和Map都有可變(mutable)和不可變(immutable)兩種羹膳,但是Scala傾向于使用不可變對象。按照函數(shù)式編程思想妻怎,所有的變量都應(yīng)該是不可變的榛丢,這樣可以消除共享變量选侨,乃至消除競態(tài)條件。

  5. 模式匹配和正則表達(dá)式:在Scala里,模式匹配僅次于函數(shù)值和閉包,是使用第二廣泛的特性猾封。

  6. 并發(fā)編程:Java不適合并發(fā)編程的明證是磷箕,僅僅為了這個(gè)話題就足夠出一本書了——《Java并發(fā)編程實(shí)戰(zhàn)》殿衰,在Scala里,最開始是基于事件的模型進(jìn)行進(jìn)程間通信拴竹,本書介紹了Scala actor模型的概念∏ィ現(xiàn)在再學(xué)習(xí)Scala的并發(fā)編程饼齿,建議直接學(xué)習(xí)akka。可以參考:一個(gè)超簡單的akka actor例子

  7. 與Java互操作:將Scala代碼與Java或JVM上其他語言的代碼混合使用很容易挺邀,Scala和Java一樣乳蓄,都是編譯成字節(jié)碼魂奥。通過這一部分的學(xué)習(xí),我們可以明白在Java應(yīng)用中的哪一部分可以使用Scala來提高開發(fā)效率样勃,優(yōu)化軟件產(chǎn)品诵姜。

  8. 異常處理:Java中的checked Exception強(qiáng)制我們捕獲并不關(guān)心的異常,所以溜腐,一些程序員只放一個(gè)空的catch塊在那里壓制異常,而不是讓它們自然傳遞到正確的地方被處理蚤氏。即使是沒有壓制異常毁葱,也破壞了Java應(yīng)用的封裝性。在Scala中涵妥,我們可以處理關(guān)心的異常吵取,忽略其他的異常。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萍摊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翎碑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異施敢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)济竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浴讯,你說我怎么就攤上這事仰猖□锷” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仲锄。 經(jīng)常有香客問我,道長侨颈,這世上最難降的妖魔是什么余赢? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮哈垢,結(jié)果婚禮上妻柒,老公的妹妹穿的比我還像新娘。我一直安慰自己耘分,他們只是感情好举塔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著求泰,像睡著了一般央渣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渴频,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天芽丹,我揣著相機(jī)與錄音,去河邊找鬼卜朗。 笑死拔第,一個(gè)胖子當(dāng)著我的面吹牛咕村,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蚊俺,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼培廓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了春叫?” 一聲冷哼從身側(cè)響起肩钠,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暂殖,沒想到半個(gè)月后价匠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呛每,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年踩窖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨横。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洋腮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出手形,到底是詐尸還是另有隱情啥供,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布库糠,位于F島的核電站伙狐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞬欧。R本人自食惡果不足惜贷屎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艘虎。 院中可真熱鬧唉侄,春花似錦、人聲如沸野建。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贬墩。三九已至榴嗅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間陶舞,已是汗流浹背嗽测。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唠粥。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓疏魏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晤愧。 傳聞我的和親對象是個(gè)殘疾皇子大莫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容