前言 :
Scala 是一個可直譯、編譯、靜態、運行於 JVM 之上、可與 Java 互操作、融合物件導向編程特性與函式編程風格的程式語言. 從一些簡單的語法開始,了解 Scala 的許多特性,所以就算是起步走,東西也夠多了. 簡單的小程式可以使用 scala 指令,編譯的事就交給 scalac,編譯想快點就用 fsc. (Scala 官網), 運算式有傳回值,迴圈沒有,對了!Scala 沒有 break 與 continue.
try 運算式 :
如果你撰寫了這段程式 :
- val filename = args(0)
- if(args.isEmpty)
- throw new IllegalArgumentException("Please provide arguments")
- val filename = args(0)
- // Continue app
- Try2.scala 代碼 :
- try{
- val filename = args(0)
- // Continue app
- }catch{
- case ex: ArrayIndexOutOfBoundsException => println("Please provide arguments!")
- }
在 Scala 中,並不要求你得處理受檢例外(Checked Exception)(參考 Java 的 例外的繼承架構), 你只需針對感興趣或有能力處理的例外加以捕捉並處理即可,如果在例外發生的當時情境下無力處理,你什麼事都不用作(不用寫 try...catch 也不用在 函式或方法上用 throws 宣告),將處理留給後續的呼叫者來善後(在 Java 中,受檢例外是由編譯器進行檢查,Scala 編譯器不檢查受檢例外,事實上,Scala 也沒有 throws 關鍵字。如果你要讓某個方法在編譯後產生的位元碼中,有 Java 中 throws 宣告,以便給 Java 程式使用時可以得到 受檢例外檢查機制,則可以使用 @throws 標注,標注的使用之後還會說明). 在Scala 中,try...catch...finally 是運算式,所以會有運算結果,例如你可以撰寫這樣的程式碼 :
如 果有提供命令列引數,則將 filename 設定為所提供的值,否則就是設定為 default.properties。你也可以在 finally 中提供傳回 值,不過並不鼓勵,因為 finally 中基本上是用來關閉、釋放某些資源或作些善後動作。如果你要在 finally 中提供傳回值,要注意一下以下兩個程式片段的不同 :
- def doSome = try { 1 } finally { 2 }
- def doSome: Int = try { return 1 } finally { return 2 }
由於 Exception 是 ArrayIndexOutOfBoundsException 的父類別,所以這個程式片段,只會符到到第一個 Exception,第二個 ArrayIndexOutOfBoundsException 永遠不會被比對到,Scala不會提出警訊(Java的編譯器會對這部份作檢查),程式會照常執行.
Supplement
* Tutorialspoint - Scala Exception Handling
* 起步走 - 內建控制結構 (if 運算式)
* 起步走 - 內建控制結構 (for 運算式)
* 起步走 - 內建控制結構 (while 迴圈)
* 起步走 - 內建控制結構 (match 運算式)
* 起步走 - 內建控制結構 (try 運算式)
沒有留言:
張貼留言