但 Scala 沒有 for (int i = 0; i < 100; i++) 這種方式,且 Scala 建議 loop 盡量使用其他的方式來取代,比如 iteration 或 recursion。
由於 imperative 的方式通常比 functional 的方式快,所以若你的程式中某段 loop 需要較好的效能,這時使用 while loop 來製作會比較好。
while loop 有兩種格式
1. while
while (a != 0) { ... }2. do ... while
do { ... } while (a != 0)
while 的 result value 為 Unit,並不是最後一個 statement 的 result value,這要特別注意。
由於 while 的 result value 為 Unit,所以有時不稱 while 為 expression。具有類似執行重複工作的 for,我們稱它為 expression,因為 for 的 result value 有很清楚的定義,我們將於下一篇中討論。
while loop 中,可能會有一個陷阱,就是 assignment 放在 while 中。
var nRead = 0 while ((nRead = in.read(buf)) != -1) { // 這裡有一個錯誤 ... }nRead = in.read(buf) 是一個 assignment,所以 result value 為 unit,因此與 -1 比較一定是 false。 compiler 可以幫忙抓出這樣的錯誤,但只是一個 warning,請各位要小心。
break 與 continue 由於從某一個點直接跳離 while,會演變成程式需要仔細瞭解才可駕馭,違反函數式原則,因此以被移除。
沒有留言:
張貼留言