Scala 是一門怎樣的語言,具有哪些優缺點?

支持高階函數。lambda,閉包,currying,block都是個玩

支持偏函數。 match, 佔位都是個玩

支持trait。 mixin,依賴注入都是個玩

支持Future。Promise, 寫多線程,並發都是個玩

....

待補充


說通俗一些,你可以把scala當做在java語言上做的一層抽象。scala編譯器會將scala源碼編譯成 bytecode and run in jvm. scala語言保留了java語言的面向對象的特性,並增加了許多亮點,例如類參數,trait關鍵字等等。程序員可以用十分簡潔的代碼表達許多複雜的邏輯和組件。除此之外,scala也是一門函數式語言,具有許多函數式的特性,例如function literal , high-level function ,lamda 等等。函數式的表達讓用戶邏輯更加清晰,代碼更加簡潔。


關於scala這門語言名字的由來,可以很容易聯想到scalable, 可擴展的。為什麼這麼說呢?應為scala的設計理念是less build-in control abstract. 開發人員將大量的操作都以高階函數和庫的形式來向用戶提供,scala的內置操作很少,甚至比c語言還少。用戶可以根據自己的需要來訂製操作。


目前,scala在國外比較火,twrriter已經將自己全部的代碼從ruby轉到了scala. 除此之外,AMPLab的大部分核心產品都是由scala開發的,例如最近非常火的大數據分析機器spark。


因為有人說好,然後其他人怕別人以為他不懂所以也跟著說好。

然後吹著吹著,scala就上天了。


任何語言都有側重,我認為Scala就是做更好的Java,是JVM上的另一個選擇罷了。


我現在在研究scala。這是一門優雅(語法工整美觀)、有趣(各種很炫的語法糖)、簡練(write less,do more)、靈活(跟JavaScript一樣靈活)而強大(跟java一樣強悍)的語言。就目前的印象,感覺編譯有點慢,相信會有改觀。

這門語言,我還是覺得非常值得投入時間和精力。


和akka一起寫非同步編程比較方便。future挺好用,actor稍微有點複雜

代碼量相對於java減少了。程序員的生產效率降低了。寫出優美可讀的代碼 需要一定強迫症。

上過coursera那門 martin的課程,很枯燥。還是在團隊里被code review學得快一些。

這個資料不錯, 很多好的scala習慣

Effective Scala


靈活


什麼是scala基本也就回答了scala的優點了

比如說基於JVM 比如說強類型 比如說同時可以使用函數式和過程式寫法 完整的OO模型 類型推斷等等

對於剛上手的人來說 我覺得scala的高表達能力是個很重要的優勢 寫起來很舒服

如諾鐵所說 scala調java沒什麼問題 java調scala相對會比較糾結 當你想傳入tuple或者函數這樣的對象作為參數的時候可能要多繞那麼一點 而且scala自己生成的方法簽名在java看來也怪怪的 但這也只是習慣的問題 熟悉之後也就不是問題了 如果你的scala工程要開放api給java 倒是可以自己用java封裝一套api


很多人說Scala是非常靈活的語言,我感覺是「笨重的靈活」


Scala 屬於一種學習曲線比較陡峭的語言,一開始需要知道很多的編程理念,函數式,面向對象本身都不是簡單的概念,它把兩者相當自然的融合在一起,當然對程序員的要求也高。不建議作為初學語言,但是對於老鳥,它是一個非常強大的工具,給了使用者強大的表達能力。

Scala 的對並發程序設計非常友好,Promise/Future 機制可以很方便的寫出批量並發執行的任務,Future 眼花繚亂的變換方式讓曾經麻煩一堆的線程同步機制黯然失色。Akka 的Actor 模型讓開發大型並發程序更加簡潔高效,這個模型充分借鑒了Erlang 語言的並發機制,只是實現成了程序庫。STM(軟體事務內存)也可以方便的提高鎖的效率。

Scala 的語法糖(自定義控制結構,隱式轉換等)讓設計內置 DSL (領域專有語言)更為方便。可以方便的設計自己語法結構,用來表述特定領域的概念。設計內置於宿主語言的 DSL 畢竟比重新開發一個語言容易得多,不用再做詞法分析、句法分析、編譯器等等。還能直接使用宿主語言的各種現有庫。幾行代碼就能寫出自己的語法結構,對語言控來說,這是最好的工具。我自己就用Scala 設計過表達保險語意、股票交易策略等不同領域的DSL。

Scala 也有動態腳本載入執行的能力。很多情況下我們喜歡腳本語言是因為不用編譯直接就可以執行。Scala 有兩種方式可以達到這個效果,一個是運行時載入一段代碼,動態編譯,然後用ClassLoader 載入編譯完成的位元組碼並執行。這種方法比較麻煩,主要是編譯需要的依賴庫都要指定到 classpath 中,程序已經載入的庫默認都是無法直接在動態編譯中引用。另一種更簡潔的方法是在運行時調用scala 的 repl 解釋器,載入一段scala 腳本編譯執行,執行結果最後返回的對象可以由宿主程序獲取。這樣Scala 也可以當普通的腳本語言使用。不過腳本動態載入編譯的時間有點長。

Scala 是強類型靜態語言,所以才有很方便的類型檢查,類型推斷,IDE可以幫助做很多智能機制,讓代碼寫起來很舒暢,編譯器也能夠檢查出很多的錯誤。當然有人喜歡動態語言的靈活,有人喜歡靜態語言的嚴謹,自己喜歡就好。

Scala 的函數式編程模型簡單的使用就會讓人很喜歡。高級的使用機制如 scalaz 庫,燒腦呀,這是證明你是高智商人群的利器。

還有 Spark ,這個太時髦了,很多人就是因為Spark才知道 Scala的。用Spark 你就應該用Scala ,畢竟是原配。還可以用 Spark 的 MLlib 做機器學習,時髦的東西都有。

寫的太羅嗦了,簡而言之,Scala 是一種表達能力極強的語言,而且允許你創造自己的表達機制。其實他的語言機制很簡單,人們覺得它複雜是因為 Scala 標準庫用這些簡單的機制創造出了花樣繁多的用法。

語言只是工具,重要的是人。


強類型,FP+OO,有著spark、kafka、akka這樣的開源項目及twitter級公司大力支持,比較看好


可以通過兩篇簡短的文章快速了解一下:

Scala語言簡介

Scala基本語法


模式匹配很不錯,而且 actor 對並發的支持也很好


傳說是FP中的C++。於是我去學C++了。

(不歸路


推薦閱讀:

2016年你應該學習的語言和框架

TAG:編程語言 | Scala | 如何看待評價X |

分頁阅读: 1 2