4.Scala 類和對象 (一)

有了前面的Scala基礎,從本篇開始由淺到易逐步介紹Scala編程的各個方面,博客不可能做到面面俱到,還是希望你有些編程基礎,尤其是有些面向?qū)ο蟮木幊袒A,如Java,C++,C#等更好。出支持函數(shù)化編程外,Scala也是一個純面向?qū)ο蟮木幊陶Z言。本篇和下篇介紹Scala的類和對象.

首先介紹Scala的類定義,我們以一個簡單的例子開始,創(chuàng)建一個計算整數(shù)累計校驗和的類ChecksumAccumulator

1

class ChecksumAccumulator{

2

private var sum=0

3

def add(b:Byte) :Unit = sum +=b

4

def checksum() : Int = ~ (sum & 0xFF) +1

5

}

可以看到Scala類定義和Java非常類似,也是以class 開始,和Java不同的,Scala的缺省修飾符為public ,也就是如果不帶有訪問范圍的修飾符public,protected,private,Scala缺省定義為 public。類的方法以def定義開始,要注意的Scala的方法的參數(shù)都是val類型,而不是var類型,因此在函數(shù)體內(nèi)不可以修改參數(shù)的值,比如如果你修改add方法如下:

1

def add(b:Byte) :Unit ={

2

b=1

3

sum+=b

4

}

此時編譯器會報錯:

/root/scala/demo.scala:5: error: reassignment to val

b=1

^

one error found

類的方法分兩種,一種是有返回值的,一種是不含返回值的,沒有返回值的主要是利用代碼的“副作用”,比如修改類的成員變量的值或者讀寫文件等。Scala內(nèi)部其實將這種函數(shù)的返回值定為Unit(類同Java的void類型),對于這種類型的方法,可以省略掉“=”好,因此如果你希望函數(shù)返回某個值,但忘了方法定義中的“=”,Scala會忽略方法的返回值,而返回Unit。

再強調(diào)一下,Scala代碼無需使用“;”結(jié)尾,也不需要使用return返回值,函數(shù)的最后一行的值就作為函數(shù)的返回值。

但如果你需要在一行中書寫多個語句,此時需要使用“;”隔開,不過不建議這么做。你也可以把一條語句分成幾行書寫,Scala編譯器大部分情況下會推算出語句的結(jié)尾,不過這樣也不是一個好的編碼習慣。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容