在 Java 我們在 method 的定義中,要 return 一個值,需要使用 return 這個 keyword。
在 Scala,除可使用 return keyword 來作為 method 的 return 值外,也可使用 method 最後一個執行到的 statement 作為整個 method 的 return 值。這樣的方式,在許多的語言中出現。
Scala 鼓勵使用最後一個執行 statement 的值為 return 值,而不鼓勵使用 return。不鼓勵的原因在於 Scala 引進函數式的觀念。
在函數式的語言中,對於破壞整個流程的結構(construct)非常不歡迎,因為這隱含你需要一個一個 statement 循序走下去,才知道何時跳開原有流程。
我們習慣在程式中,把某一變數與某個值比較,再視不同的值走不同的程式路徑。這種方式,函數式語言是不歡迎的,因為整個函數邏輯被分割成多塊。而 return 這種忽然由某一個 statement 中直接跳出 method 的作法,是函數式語言不能忍受的,因此 Scala建議你不要使用這種方式。
同樣的原因,break 與 continue 這兩個在 Java loop 中常用到的 statement,也完全不符合函數式語言的概念。
Scala 建議大家盡量少用 loop 來製作程式(你應該盡量使用 iteration 與 recursion來取代 loop), break 與 continue 這兩個突兀式脫離迴圈的方式,會加深 loop 誤用的程度,是 Scala 所要改革的對,因此在 Scala 中已遭移除,你應該注意。
既然移除 break / continue,以相同的邏輯,Scala 應該一併把 return 移除,但 Scala 只是建議你不要使用,可見 return 的影響力。相信 Martin 的團隊針對 return 是否移除,一定有過相當多的激辯。
沒有留言:
張貼留言