學(xué)了一段時間的Scala,總體感覺歸納如下:
以上這點(diǎn),我估計(jì)Groovy、Clojure,也有類似的情況吧? 基于Java平臺,在享受Java強(qiáng)大支撐的同時,必然也要受限于Java平臺,這點(diǎn)我不是很喜歡,如果說做Java EE開發(fā),舊有的知識已經(jīng)很熟練的情況下,學(xué)習(xí)Scala的意義必然大大降低了,那么,剩下來吸引我的語法糖,其獨(dú)特之處到底在哪兒?實(shí)際上,函數(shù)式的影子,在Ruby上已經(jīng)展現(xiàn)地很好了......
而于性能,估計(jì)要不同場景不同分析,在需要充分考慮性能的場景下(不是每時每刻都需要著重考慮性能的,只有在少數(shù)情況下,性能問題才會浮現(xiàn)),Scala具備一定場景應(yīng)用優(yōu)勢,就是其招牌式的并發(fā)能力,進(jìn)一步講,我認(rèn)為是方便并發(fā)編程的能力,因?yàn)樗谶@方面封裝地很好,便于使用,但千萬別搞錯了,絕不是并發(fā)能力,因?yàn)?,Scala跳不出Java平臺的掌控。
另一方面,說是Scala進(jìn)軍了.Net平臺?但我查了下,好像許久未更新了?退一步而言,就算是在.Net平臺落地生根、開花結(jié)果,也只是把上面一句話變變而已:“基于.Net平臺,在享受.Net強(qiáng)大支撐的同時,必然也要受限于.Net平臺”。
據(jù)此,我已深信不疑,Scala絕對取代不了Java。通過這種植入式(如JSR-223規(guī)范)的實(shí)現(xiàn),永遠(yuǎn)都不可能取代Java,再好(至少從目前來看)也是綠葉配紅花。即使是在語言層面,除非官方原生直接支持或吸取借鑒,否則也不可能取代。但我們應(yīng)該看到,光從語法角度看(因?yàn)槲沂钦Z法糖控),Scala很“現(xiàn)代”,Java已“老舊”,Java的后續(xù)版本,是不是也會借鑒一些“時髦點(diǎn)的東西”呢?我覺得這是肯定的。
很遺憾,不管你喜不喜歡Java,它還是會擺在哪兒。但Scala給了你多一種選擇,你可以選擇它,一行搞掂getter/setter,或者像這樣:
"Hello".foldLeft(List[BigInt]())((b,a) => a :: b).reverse.reduce(_ * _)
而不用寫羅羅嗦嗦的Java語句。但自己心里一定要明白,你喜歡的東西并不能取代Java,你也不應(yīng)該否認(rèn)Java,雖然你可以罵Java、討厭Java。
如果你第一次接觸函數(shù)式語法,恰好又是通過Scala,你會喜歡上Scala;同樣道理,如果你是通過Ruby第一次接觸函數(shù)式語法,估計(jì)你深深喜歡上的就是Ruby了。無論如何,你接觸第二門類似語法語言的時候,你的熱情必然不太可能燃燒起來 - 所以,如果你想擴(kuò)展視野,你選一門差不多的語言來學(xué)就好了。
回到Java上來說,立志于Java平臺開發(fā)的,還是應(yīng)該首先掌握J(rèn)ava語言本身,走穩(wěn)了,再學(xué)飛。
基于興趣來看待Scala比較現(xiàn)實(shí)些 - 有興趣就學(xué),沒興趣就算了。我需要Scala嗎?
![]() |
|
|