Scala簡介
Scala是一種有趣的語言。它一方面吸收繼承了多種語言中的優秀特性,一方面又沒有拋棄Java這個強大的平臺,它運行在Java虛擬機(JavaVirtualMachine)之上,輕松實現和豐富的Java類庫互聯互通。它既支持面向對象的編程方式,又支持函數式編程。它寫出的程序像動態語言一樣簡潔,但事實上它確是嚴格意義上的靜態語言。Scala就像一位武林中的集大成者,將過去幾十年計算機語言發展歷史中的精萃集于一身,化繁為簡,為程序員們提供了一種新的選擇。
Java簡介
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平***立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
Java的工作原理
由四方面組成:
(1)Java編程語言
(2)Java類文件格式
(3)Java虛擬機
(4)Java應用程序接口
當編輯并運行一個Java程序時,需要同時涉及到這四種方面。使用文字編輯軟件(例如記事本、寫字板、UltraEdit等)或集成開發環境(Eclipse、MyEclipse等)在Java源文件中定義不同的類[22],通過調用類(這些類實現了JavaAPI)中的方法來訪問資源系統,把源文件編譯生成一種二進制中間碼,存儲在class文件中,然后再通過運行與操作系統平臺環境相對應的Java虛擬機來運行class文件,執行編譯產生的字節碼,調用class文件中實現的方法來滿足程序的JavaAPI調用。
scala和java的區別
1、對字符串的支持
scala采用三個雙引號“”“支持換行字符串,Java需要采用“+”進行字符串的連接。
2、方法返回值
scala的return是可選的,方法調用會自動返回最后求值的表達式。如果scala使用了return則需要顯示指定方法的返回值
Java需要顯示的采用return進行值的返回。
3、類和方法修飾符的默認值
scala默認是public,java默認是protected.
4、默認導入的類
scala默認導入java.lang包、scala包、scala.Predef類。
java默認導入java.lang包
5、接口
scala不支持接口interface,采用trait(類似于Java中的抽象類)。
java支持接口
6、類成員和單例對象
scala語言機制上支持單例對象和伴生對象,伴生類。伴生類和伴生對象需要在一個類文件中使用,在使用伴生對象時,系統隱式地調用apply生成一個伴生實例的對象。
java由類成員,單例對象需要自己實現。
7、方法參數
scala支持以函數作為參數,格式為deferror(msg:=》String)表示msg是輸入參數,輸出參數為String的函數。
java不支持。
scala相對于java存在的優勢
相比較與Java,在下覺得Scala最主要的有以下兩點優勢:
FP泛型支持
如果用多了Spring中大量的template接口,你就會覺得FP其實還是蠻好用的。
而這僅僅是FP好處的冰山一角。
函數其實就是一個input-》output(scala也是這么表示一個函數的),沒有任何副作用,與狀態無關,由于這種特性,所以函數式的編程范式在分布式領域有很多好處
對于函數式編程,我的知識實在是皮毛,但可以這么說,FP相對與OO有哪些優勢,Scala對于Java差不多就有哪些優勢。
正因為FP有如此多的優勢,所以Java8才引入了FP.從某種程度上來說,Java認可了Scala的做法。
類型系統支持
如果說Java是一種類型安全的語言,那么毫無疑問,Scala的類型更加安全,從某種程度上說,Scala的類型是圖靈完備的,而Java不是。我的一位好朋友在這方面研究的比較深(http://hongjiang.info/scala/),而我對與Scala的類型系統的理解,也還是皮毛。
正是以上這兩點大優勢,造成了Scala比Java更加安全,同時又具備靈活性,想象力。
其他語言層面上的優勢
在Java中,你是否有時很想繼承多個AbstractClass呢?對不起,Java只支持單繼承
在Scala中,你可以進行mixin(Java8也開始引入defaultmethod了呢)
在Java中,想要一個singleton?要么在staticblock中做,要么利用Enum的單例特性完成,或者其他更糾結的方法。
在Scala中,只要聲明為object,即為單例。
在Java中,想要延遲加載一個單例?doublecheck吧
在Scala中,只要在object中將變量修飾為lazy即可
在Java中,想要對集合進行一些操作?使用一層一層的for循環吧
在Scala中,使用collection的一些集合操作,即可獲得如寫SQL般的享受。
在Java中,在并發中想對Future進行回調?對不起,Future不是Listenable(無法支持回調),除非你使用額外的工具(如guava,spring)
在Scala中,本來就主張異步編程,future和promise的配合讓人非常愉快。
在Java中,要透明擴展一個第三方庫的類怎么辦?包裝,再加一層。
在Scala中,有強大的implicit機制讓你更優雅的做到這一點,同時還能保證類型安全(比起Ruby的monkeypatch,要安全得多)
Scala的表達力很強,相同功能的代碼,用Java和Scala的行數不可同日而語。
這些單單是語言層面上的優勢,除此之外,Scala還能無縫結合Java
盡管羅列了如此多的好處,但Scala有如下劣勢:
語法復雜,學習曲線非常高
國內Scala程序員很難找(目前Scala的影響力也在緩慢擴大,比如Scala社區中的明星Spark的流行也在慢慢拉動Scala的流行,如同rails之于ruby)
社區,生態還比較小,Scala風格的庫還非常少(但可以和Java很容易的斜街很多時候彌補了這一點)
-
JAVA
+關注
關注
19文章
2966瀏覽量
104702 -
scala
+關注
關注
0文章
42瀏覽量
6417
發布評論請先 登錄
相關推薦
評論