2021/03/28

[筆記] Effective Java #57 將區域變數的作用域最小化

Effective Java 3rd 簡體中文版筆記 #57 將區域變數的作用域最小化
[#15] 類似,較早期的程式語言 (C 語言),要求區域變數必須在程式開頭進行宣告,出於習慣,但 Java 允許開發者在任何地方宣告變數。要讓變數作用域最小化,最好就是在第一次使用時才作宣告。區域變數過早宣告,會讓開發者無法知道其初始值,及容易在其它的區域誤用。

幾乎在每一個區域變數的宣告,應該包含一個初始化語句。如果該變數還沒辦法作初始化,這時就應該考慮是否該延後宣告該變數,當然在 try-catch 區塊例外。迴圈 (loop) 中提供特殊的機會讓區域變數作用域最小化,無論是傳統的 for 或是 for-each,都可以宣告迴圈變數 (loop variable),它的作用域正好就是迴圈範圍之內,for 會優先於 while
從下面範例可以發現一個 copy-paste 後常出現的錯誤,應該要使用 while(i2.hasNext()),但沒有修改到造成誤用,程式執行時,不一定會發生例外,反而會造成無法預期的結果。
Iterator<Element> i = c.iterator();
while (i.hasNext()) { ... }

Iterator<Element> i2 = c2.iterator();
while (i.hasNext()) { doSomething(i2.next()); }  // BUG!
如果改成使用 for,在 compile 時就可以發現錯誤。
for(Iterator<Element> i = c.iterator(); i.hasNext(); ) { ... }
// compile error
for(Iterator<Element> i2 = c2.iterator(); i.hasNext(); ) { ... }
轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-57-local-variable.html

沒有留言:

張貼留言