1.? Scala有多cool
“Put productivity & creativity back in the hands of developers”
1.1.? ? 速度!
Java的運行速度:基于JVM,和Java運行速度相當。有個好的編譯器(Scalac)和運行時(JVM)。Ruby、Perl、Python對大項目運行效率很無奈。
Python/Ruby的編程速度:有更多的內建庫和數據結構,編程就更快,Scala在完全繼承Java和.NET的標準庫的基礎上,還擴展了更豐富有用的函數庫。
類庫和運行速度有關系嗎?——很大程度上有,眾多專家已經在類庫中準備了充分優化的穩定算法,Scala對Java Collection算法進行直接包裝或者直接調用,使用類庫算法,不用擔憂自造輪子的運行效率。
Scala是靜態語言,Scalac和Javac是同一作者,編譯成.class后運行于JVM平臺,近20年那么多大公司投入進行的優化也不是白搭。對于大部分的應用來說,使用Scala不用再顧慮運行速度,它可能不是最快,但至少逼近Java,而不像Groovy、JRuby、Jython 那般與Java有高達數十倍的效率差距。
1.2.? ? 易用的數據結構
List-Map-Tuple及其豐富特性支持讓你解決數據結構問題時游刃有余。
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? 適當地選用OOP或者FP,能夠使表達相對另一種更加清晰準確。
l? 實際可見的生產力在于:一個應用中的部分代碼尤其是高知識凝聚的代碼如數學函數和設計模式,一般來說不會自己編寫,而是會來自于現成的Java庫,或者其他語言,或者偽代碼。我們可以很容易地把過程語言、面向對象語言、函數式語言中的代碼“翻譯”成Scala代碼。Scala的混血性給我們的實際使用提供了便利。
l? 語言特色能夠塑造編程者的思維: C++也能使用抽象基類設計多重繼承,但Java的接口引導你走得更遠;Java也能設計類型安全的靜態方法(final static),但Scala鼓勵你這樣做并逐步從OOP到達FP的彼岸,而且來去自如。
1.4.? ? 動態+靜態
Scala雖然是一門徹頭徹底的靜態語言,但又具備了現代動態語言的很多方便和靈活:
l? 不需要冗余的類型聲明
l? 可以在已有類上增加新方法(implicit轉換和Dynamic trait)
l? 可以把不繼承共同父類的不同類型對象傳到方法中
l? 可以做靜態語言的Refactoring
l? 不用象動態語言那樣測試代碼比業務代碼還多
l? 編譯靜態語言的性能
l? Read-Eval-Print Loop交互解釋器(注:Linux下的用戶體驗遠好于Windows下)
1.5.? ? DSL
Scala可以把xml/html處理、數學公式表達、SQL查詢等包裝的更優雅、更合理,為使用者提供更好的API。這也使Scala的程序也更可讀,從而更易于維護。
1.6.? ? 夠復雜
不同的思考模式:Java是先寫后想,Scala是先想后寫(其實FP大都如此)。
你不要指望把Scala作為初學者的第一門編程語言(個人非常贊同),這門語言甚至不是初級程序員能夠掌控的——換句話說,能夠讀懂和寫Scala代碼,說明你是一個不折不扣的資深程序員,或者更準確一點,是資深Java程序員。
1.7.? ? 夠有趣
還看這句話:“Put productivity & creativity back in the hands of developers”。其實不僅限于Scala,對于所有的編程語言來說,一門語言是否“好玩”有趣,能否激起創作欲,才是最關鍵的,這比語言風格、運行速度、工具支持、社區文化都來得重要。
有些人對一門語言會玩一輩子,就像Lisp、Haskell和Smalltalk的擁躉;而有些人會不斷尋找下一個玩意兒,就像原來玩Java的一些人發現更好玩的Ruby和Python之后,倒戈狂噴Java,力挺后者;Groovy/Grails的玩家在很短的時間里面,寫了無數的擴展和Plugin應用;學習Scala,能很多好玩的地方,能用它有激情地去寫一些振奮人心的應用出來!
1.8.? ? 開發社區
Scala開發/用戶社區氣氛良好,基本都是資深開發者以及有一定經驗的用戶,不會碰到太弱智的事(提問、爭吵),除了語言和工具開源免費,最權威和最好的書也都是免費的(包括Lift社區)