Scala与Java差异(一)之基础语法
一、Scala解釋器的使用
(1)REPL
Read(取值)-> Evaluation(求值)-> Print(打印)-> Loop(循環(huán))。
scala解釋器也被稱為REPL,會快速編譯scala代碼為字節(jié)碼,然后交給JVM來執(zhí)行。
(2)計算表達式
在scala>命令行內(nèi),鍵入scala代碼,解釋器會直接返回結(jié)果給你。如果你沒有指定變量來存放這個值,那么值默認的名稱為res,而且會顯示結(jié)果的數(shù)據(jù)類型,比如Int、Double、String等等。
例如,輸入1 + 1,會看到res0: Int = 2
(3)內(nèi)置變量
在后面可以繼續(xù)使用res這個變量,以及它存放的值。
例如,2.0 * res0,返回res1: Double = 4.0
例如,"Hi, " + res0,返回res2: String = Hi, 2
(4)自動補全
在scala>命令行內(nèi),可以使用Tab鍵進行自動補全。
例如,輸入res2.to,敲擊Tab鍵,解釋器會顯示出以下選項,toCharArray,toLowerCase,toString,toUpperCase。因為此時無法判定你需要補全的是哪一個,因此會提供給你所有的選項。
例如,輸入res2.toU,敲擊Tab鍵,直接會給你補全為res2.toUpperCase。
?
二、變量聲明
(1)聲明val變量
可以聲明val變量來存放表達式的計算結(jié)果。
例如,val result = 1 + 1
后續(xù)這些常量是可以繼續(xù)使用的,例如,2 * result
但是常量聲明后,是無法改變它的值的,例如,result = 1,會返回error: reassignment to val的錯誤信息。
(2)聲明var變量
如果要聲明值可以改變的引用,可以使用var變量。
例如,val myresult = 1,myresult = 2
但是在scala程序中,通常建議使用val,也就是常量,因此比如類似于spark的大型復(fù)雜系統(tǒng)中,需要大量的網(wǎng)絡(luò)傳輸數(shù)據(jù),如果使用var,可能會擔(dān)心值被錯誤的更改。
在Java的大型復(fù)雜系統(tǒng)的設(shè)計和開發(fā)中,也使用了類似的特性,我們通常會將傳遞給其他模塊 / 組件 / 服務(wù)的對象,設(shè)計成不可變類(Immutable Class)。在里面也會使用java的常量定義,比如final,阻止變量的值被改變。從而提高系統(tǒng)的健壯性(robust,魯棒性),和安全性。
(3)指定類型
無論聲明val變量,還是聲明var變量,都可以手動指定其類型,如果不指定的話,scala會自動根據(jù)值,進行類型的推斷。
例如,val name: String = null
例如,val name: Any = "leo"
聲明多個變量:可以將多個變量放在一起進行聲明。
例如,val name1, name2:String = null
例如,val num1, num2 = 100
?
三、數(shù)據(jù)類型與操作符
(1)基本數(shù)據(jù)類型
Byte、Char、Short、Int、Long、Float、Double、Boolean。
乍一看與Java的基本數(shù)據(jù)類型的包裝類型相同,但是scala沒有基本數(shù)據(jù)類型與包裝類型的概念,統(tǒng)一都是類。scala自己會負責(zé)基本數(shù)據(jù)類型和引用類型的轉(zhuǎn)換操作。
使用以上類型,直接就可以調(diào)用大量的函數(shù),例如,1.toString(),1.to(10)。
(2)類型的加強版類型
scala使用很多加強類給數(shù)據(jù)類型增加了上百種增強的功能或函數(shù)。
例如,String類通過StringOps類增強了大量的函數(shù),"Hello".intersect(" World")。
例如,Scala還提供了RichInt、RichDouble、RichChar等類型,RichInt就提供了to函數(shù),1.to(10),此處Int先隱式轉(zhuǎn)換為RichInt,然后再調(diào)用其to函數(shù)
(3)基本操作符
scala的算術(shù)操作符與java的算術(shù)操作符也沒有什么區(qū)別,比如+、-、*、/、%等,以及&、|、^、>>、<<等。
但是,在scala中,這些操作符其實是數(shù)據(jù)類型的函數(shù),比如1 + 1,可以寫做1.+(1)
例如,1.to(10),又可以寫做1 to 10
scala中沒有提供++、--操作符,我們只能使用+和-,比如counter = 1,counter++是錯誤的,必須寫做counter += 1.
?
四、函數(shù)調(diào)用與apply()函數(shù)
(1)函數(shù)調(diào)用方式
在scala中,函數(shù)調(diào)用也很簡單。
例如,import scala.math._,sqrt(2),pow(2, 4),min(3, Pi)。
不同的一點是,如果調(diào)用函數(shù)時,不需要傳遞參數(shù),則scala允許調(diào)用函數(shù)時省略括號的,例如,"Hello World".distinct
(2)apply函數(shù)
Scala中的apply函數(shù)是非常特殊的一種函數(shù),在Scala的object中,可以聲明apply函數(shù)。而使用“類名()”的形式,其實就是“類名.apply()”的一種縮寫。通常使用這種方式來構(gòu)造類的對象,而不是使用“new 類名()”的方式。
例如,"Hello World"(6),因為在StringOps類中有def apply(n: Int): Char的函數(shù)定義,所以"Hello World"(6),實際上是"Hello World".apply(6)的縮寫。
例如,Array(1, 2, 3, 4),實際上是用Array object的apply()函數(shù)來創(chuàng)建Array類的實例,也就是一個數(shù)組。
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Scala与Java差异(一)之基础语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机主板上的CMOS是什么主板CMOS
- 下一篇: Scala与Java差异(二)之条件控制