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