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