1.? Scala有多cool
“Put productivity & creativity back in the hands of developers”
1.1.? ? 速度戳表!
Java的運(yùn)行速度:基于JVM玖喘,和Java運(yùn)行速度相當(dāng)。有個(gè)好的編譯器(Scalac)和運(yùn)行時(shí)(JVM)。Ruby江解、Perl、Python對(duì)大項(xiàng)目運(yùn)行效率很無(wú)奈翔怎。
Python/Ruby的編程速度:有更多的內(nèi)建庫(kù)和數(shù)據(jù)結(jié)構(gòu)枕屉,編程就更快,Scala在完全繼承Java和.NET的標(biāo)準(zhǔn)庫(kù)的基礎(chǔ)上衬廷,還擴(kuò)展了更豐富有用的函數(shù)庫(kù)摇予。
類(lèi)庫(kù)和運(yùn)行速度有關(guān)系嗎?——很大程度上有吗跋,眾多專(zhuān)家已經(jīng)在類(lèi)庫(kù)中準(zhǔn)備了充分優(yōu)化的穩(wěn)定算法侧戴,Scala對(duì)Java Collection算法進(jìn)行直接包裝或者直接調(diào)用,使用類(lèi)庫(kù)算法跌宛,不用擔(dān)憂(yōu)自造輪子的運(yùn)行效率酗宋。
Scala是靜態(tài)語(yǔ)言,Scalac和Javac是同一作者疆拘,編譯成.class后運(yùn)行于JVM平臺(tái)蜕猫,近20年那么多大公司投入進(jìn)行的優(yōu)化也不是白搭。對(duì)于大部分的應(yīng)用來(lái)說(shuō)哎迄,使用Scala不用再顧慮運(yùn)行速度回右,它可能不是最快,但至少逼近Java漱挚,而不像Groovy楣黍、JRuby、Jython 那般與Java有高達(dá)數(shù)十倍的效率差距棱烂。
1.2.? ? 易用的數(shù)據(jù)結(jié)構(gòu)
List-Map-Tuple及其豐富特性支持讓你解決數(shù)據(jù)結(jié)構(gòu)問(wèn)題時(shí)游刃有余。
List(1,31,4,3,53,4,234) filter (10<) filter (100>)? // List(31, 53)
val (a,b) = List(1, 31,4,3,53,4,234) partition (10>) // a=List(1,4,3,4), b=List(31,53,234)
def info(p:Person) = (name, age, email) // info._1, info._2, info._3
1.3.? ? OOP+FP
l? 適當(dāng)?shù)剡x用OOP或者FP阶女,能夠使表達(dá)相對(duì)另一種更加清晰準(zhǔn)確颊糜。
l? 實(shí)際可見(jiàn)的生產(chǎn)力在于:一個(gè)應(yīng)用中的部分代碼尤其是高知識(shí)凝聚的代碼如數(shù)學(xué)函數(shù)和設(shè)計(jì)模式,一般來(lái)說(shuō)不會(huì)自己編寫(xiě)秃踩,而是會(huì)來(lái)自于現(xiàn)成的Java庫(kù)衬鱼,或者其他語(yǔ)言,或者偽代碼憔杨。我們可以很容易地把過(guò)程語(yǔ)言鸟赫、面向?qū)ο笳Z(yǔ)言、函數(shù)式語(yǔ)言中的代碼“翻譯”成Scala代碼。Scala的混血性給我們的實(shí)際使用提供了便利抛蚤。
l? 語(yǔ)言特色能夠塑造編程者的思維: C++也能使用抽象基類(lèi)設(shè)計(jì)多重繼承台谢,但Java的接口引導(dǎo)你走得更遠(yuǎn);Java也能設(shè)計(jì)類(lèi)型安全的靜態(tài)方法(final static)岁经,但Scala鼓勵(lì)你這樣做并逐步從OOP到達(dá)FP的彼岸朋沮,而且來(lái)去自如。
1.4.? ? 動(dòng)態(tài)+靜態(tài)
Scala雖然是一門(mén)徹頭徹底的靜態(tài)語(yǔ)言缀壤,但又具備了現(xiàn)代動(dòng)態(tài)語(yǔ)言的很多方便和靈活:
l? 不需要冗余的類(lèi)型聲明
l? 可以在已有類(lèi)上增加新方法(implicit轉(zhuǎn)換和Dynamic trait)
l? 可以把不繼承共同父類(lèi)的不同類(lèi)型對(duì)象傳到方法中
l? 可以做靜態(tài)語(yǔ)言的Refactoring
l? 不用象動(dòng)態(tài)語(yǔ)言那樣測(cè)試代碼比業(yè)務(wù)代碼還多
l? 編譯靜態(tài)語(yǔ)言的性能
l? Read-Eval-Print Loop交互解釋器(注:Linux下的用戶(hù)體驗(yàn)遠(yuǎn)好于Windows下)
1.5.? ? DSL
Scala可以把xml/html處理樊拓、數(shù)學(xué)公式表達(dá)、SQL查詢(xún)等包裝的更優(yōu)雅塘慕、更合理筋夏,為使用者提供更好的API。這也使Scala的程序也更可讀图呢,從而更易于維護(hù)条篷。
1.6.? ? 夠復(fù)雜
不同的思考模式:Java是先寫(xiě)后想,Scala是先想后寫(xiě)(其實(shí)FP大都如此)岳瞭。
你不要指望把Scala作為初學(xué)者的第一門(mén)編程語(yǔ)言(個(gè)人非常贊同)拥娄,這門(mén)語(yǔ)言甚至不是初級(jí)程序員能夠掌控的——換句話(huà)說(shuō),能夠讀懂和寫(xiě)Scala代碼瞳筏,說(shuō)明你是一個(gè)不折不扣的資深程序員稚瘾,或者更準(zhǔn)確一點(diǎn),是資深Java程序員姚炕。
1.7.? ? 夠有趣
還看這句話(huà):“Put productivity & creativity back in the hands of developers”摊欠。其實(shí)不僅限于Scala,對(duì)于所有的編程語(yǔ)言來(lái)說(shuō)柱宦,一門(mén)語(yǔ)言是否“好玩”有趣些椒,能否激起創(chuàng)作欲,才是最關(guān)鍵的掸刊,這比語(yǔ)言風(fēng)格免糕、運(yùn)行速度、工具支持忧侧、社區(qū)文化都來(lái)得重要石窑。
有些人對(duì)一門(mén)語(yǔ)言會(huì)玩一輩子,就像Lisp蚓炬、Haskell和Smalltalk的擁躉松逊;而有些人會(huì)不斷尋找下一個(gè)玩意兒,就像原來(lái)玩Java的一些人發(fā)現(xiàn)更好玩的Ruby和Python之后肯夏,倒戈狂噴Java经宏,力挺后者犀暑;Groovy/Grails的玩家在很短的時(shí)間里面,寫(xiě)了無(wú)數(shù)的擴(kuò)展和Plugin應(yīng)用烁兰;學(xué)習(xí)Scala耐亏,能很多好玩的地方,能用它有激情地去寫(xiě)一些振奮人心的應(yīng)用出來(lái)缚柏!
1.8.? ? 開(kāi)發(fā)社區(qū)
Scala開(kāi)發(fā)/用戶(hù)社區(qū)氣氛良好苹熏,基本都是資深開(kāi)發(fā)者以及有一定經(jīng)驗(yàn)的用戶(hù),不會(huì)碰到太弱智的事(提問(wèn)币喧、爭(zhēng)吵)轨域,除了語(yǔ)言和工具開(kāi)源免費(fèi),最權(quán)威和最好的書(shū)也都是免費(fèi)的(包括Lift社區(qū))