天天看點

scala 簡要:再拾Scala控制函數異常

版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/42191395

Spark 1.2 釋出了,核心部分是scala寫的,需要重新回顧一下Scala了,寫一點劄記,叫做scala簡要吧。

Scala 運作于JVM之上,擁有海量類庫和工具,兼顧函數式程式設計和面向對象。

在Scala中, 解釋器就是我們喜歡的REPL,變量或者函數的類型總是寫在變量或函數的後面(與java相反),數值類型的轉換通過方法而不是強制類型轉換,僅當同一行代碼存在多條語句時才需要用分号隔開。

scala 允許自定義操作符,注意有分寸地使用,在使用scala.開頭的包時,可以省去scala字首。scala沒有靜态方法,類似的特性可以用單例對象,一個類對應的companion object就跟Java中的靜态方法一樣,使用companion object的apply方法是scala中建構對象的常用方法。

控制

在scala中,判斷語句跟其他語言類似,但{}塊包含一系清單達式,其結果也是一個表達式,塊中最後一個表達式的值就是塊的值。

在for 循環的變量之前并沒有val或var的指定。該變量的類型是集合的元素類型,循環變量的作用域一直持續到循環結束。scala并沒有提供break或continue語句來退出循環,替代方法如下: 1)使用Boolean的控制變量 2)使用嵌套函數——在函數中return 3)使用Breaks對象中的break方法,控制權的轉移是通過抛出和捕獲異常完成的,出于性能考慮,盡量避免這一機制。

for有豐富的形态,可以提供多個生成器,并帶有if開頭的表達式,還可以使用任意多的循環變量定義。

函數

scala中的方法對對象進行操作,而函數不是,C++中也有函數,不過在Java中智能用靜态方法模拟,scala的函數不需要return,對應遞歸函數必須指明傳回類型,可以混用未命名參數和帶名參數,隻要那些未命名的參數是排在前面的即可。

同樣,變長參數清單很友善,通過 :_* 将值序列轉換成參數序列。當變長參數類型為Object的Java方法時,需要手工對基本類型進行轉換。

scala對不傳回值的函數有特殊的表示法,如果函數體包含在花括号當中但沒有前面的=号,那麼傳回類型就是Unit,這樣的函數也叫過程函數。

當val 被聲明為lazy時,它的初始化将被延遲加載,直到對它初次取值。每次通路延遲加載的變量,都會有一個方法被調用,以線程安全的方式檢查該值是否已被初始化。

異常

scala異常的工作機制和Java或C++一樣,但沒有"受檢"異常,捕獲異常采用模式比對的文法,不需要使用捕獲的異常對象,可以用_來替代變量名。try/catch和try/finally是互補的。