與Scala的第一次親密接觸 Java如影相隨
原創(chuàng)#t#【51CTO.com精選譯文】Scala編程語(yǔ)言在國(guó)內(nèi)還剛剛起步,很多人還都在學(xué)習(xí),使用Scala真正做過(guò)項(xiàng)目的比較少。相比之下,國(guó)外做過(guò)Scala真實(shí)項(xiàng)目的開(kāi)發(fā)者就要多一些。你的***個(gè)真正的Scala項(xiàng)目是什么?Scala英文社區(qū)近日發(fā)起了這樣一個(gè)話題,并很快引來(lái)了幾十篇回復(fù)。大部分這樣的Scala項(xiàng)目都是與Java程序關(guān)系密切的。51CTO編輯從回復(fù)中挑選了幾條,希望對(duì)學(xué)習(xí)Scala的讀者們能有一些參考價(jià)值。
51CTO編輯推薦:Scala編程語(yǔ)言專題
Case 1. Kelvin:
對(duì)我而言,我是在一個(gè)已有的 Java 程序中***次“真正地”使用 Scala。首先通過(guò) ScalaTest,利用 BDD,然后逐步轉(zhuǎn)換已有的 Java 類。每個(gè)可以利用 case 類或模式匹配進(jìn)行簡(jiǎn)化的地方,都是一個(gè)很好的機(jī)會(huì)來(lái)使用 scala。
此外,我還結(jié)合網(wǎng)絡(luò)和串行通訊編寫了一些程序,個(gè)人使用的,家庭自動(dòng)化之類的東西。
目前,我最棒的純 Scala 項(xiàng)目是 autoproxy-plugin,最近剛剛發(fā)布在 github 上。
Case 2. Rex:
我***個(gè)真正的 Scala 程序是一個(gè)半腳本程序,管理數(shù)據(jù)分析所需的 Java 程序,調(diào)用其他幾個(gè)程序用于數(shù)據(jù)分析和演示,以及查看多個(gè)輸出文件,讀取這些文件,進(jìn)行一些計(jì)算,還有根據(jù)結(jié)果更改參數(shù)來(lái)調(diào)用其他程序。
另外,這個(gè)程序的 GUI 非常簡(jiǎn)潔,用戶可以選擇想要分析的目錄(并且這個(gè)程序可依據(jù)合理的默認(rèn)設(shè)置處理所有其他一切事務(wù))。
我之所以選擇 Scala,因?yàn)槲矣幸恍┗旌系淖址幚?腳本,在 Java 中非常麻煩,還有高性能的數(shù)據(jù)輸入輸出和矢量計(jì)算,想要在標(biāo)準(zhǔn)的基本語(yǔ)言中做到足夠快速,也非常難。
還有,使用它工作一段時(shí)間之后,我發(fā)現(xiàn),將想要的結(jié)果映射(map)到 Scala 代碼中的能力變強(qiáng)了,相對(duì)于映射到其他代碼,出錯(cuò)率明顯降低了。這讓調(diào)試變得尤其簡(jiǎn)單,很多東西***次嘗試就成功了。(我不能完全弄明白為什么會(huì)這樣,但我覺(jué)得,在適當(dāng)?shù)臅r(shí)候,大量使用 map/foreach/filter 和 closure 一定是這個(gè)原因的一部分。)
Case 3. Andrew:
我的***個(gè)也是目前***一個(gè) Scala 程序是,結(jié)合每個(gè)文件的 tag 標(biāo)簽和由 http://last.fm 提取的元數(shù)據(jù),生成 MP3 列表。將這些東西結(jié)合在一起,我可以將每個(gè)音頻與一組詞(比如 rock 或 chilean 或其他任何詞)關(guān)聯(lián)起來(lái),然后就可以能明白哪些音頻是關(guān)聯(lián)的(因?yàn)樗鼈兙哂邢嗤脑~),從而就能夠生成一個(gè)歌曲列表,其中的歌曲是相互關(guān)聯(lián)的。
代碼不值得評(píng)論,而且目前有點(diǎn)小故障,不過(guò)你可以在這里查看。
也許最有趣的是我如何定義數(shù)據(jù)庫(kù)模式的:點(diǎn)擊這里。
那些“真正的工作”都是由 Java 庫(kù)(通過(guò) Empire DB 訪問(wèn)數(shù)據(jù),圖像用的是 jgrapht,等等)來(lái)完成的。
Case 4. Kris:
我***個(gè)真正的 Scala 程序是一個(gè)為訂閱服務(wù)制作的賬單系統(tǒng)。這個(gè)星期,這個(gè)系統(tǒng)剛剛跨過(guò)了一個(gè)里程碑——該系統(tǒng)目前已經(jīng)處理了超過(guò) 100 萬(wàn)美元的交易 :)
該項(xiàng)目開(kāi)始是使用 Java,在測(cè)試架構(gòu)中使用了一些 Scala。一旦這個(gè)語(yǔ)言的表達(dá)能力變得清晰,Scala 將很快不再局限于測(cè)試這個(gè)小籠子。
那么,你的***個(gè)真正的Scala項(xiàng)目是什么呢?