Posted on 2005-11-17 11:55
canonical 閱讀(427)
評論(0) 編輯 收藏 所屬分類:
軟件開發
新手總是有很多不好的代碼習慣. 最常見的一個是不使用臨時變量.例如
for(int i=0;i<myList.size();i++){
otherList.get(i).getSomeVar().getName();
otherList.get(i).getSomeVar().getValue();
}
這種做法有如下后果:
1. 代碼冗長, 容易出錯, 例如循環體中的某個i寫成了j
2. 函數調用終究是要耗費時間的, 在一個循環體中的調用往往對性能有可見的影響. 特別是當函數動態裝載數據的時候, 例如每次調用該函數都查詢數據庫, 這種不使用臨時變量的方法將會為系統留下性能隱患.
3. 一條很長的語句如果不是為流式調用而設計的, 則這種調用方式會影響到我們的調試工作. 例如
當某個中間步驟返回空指針時, 程序會拋出NullPointerException異常, 而我們得到的信息只是某一行存在空指針異常,
但是無法定位到具體是哪個步驟. 當某個中間步驟返回的值不是null但也不是我們所期望的值的時候, 我們同樣難以診斷出具體出錯的步驟.
使用臨時變量將會為調試提供便利
int i,n=myList.size();
for(i=0;i<n;i++){
MyVar var = otherList.get(i);
var.getName();
var.getValue();
...
}
在需要的時候我們可以在出錯語句處加上斷點, 或者直接輸出可疑的變量值.
4. 長語句不利于抽象出子函數. 例如在第二種方式中我們抽象出子函數的難度比第一種方式小
void processVar(MyVar var){
var.getName();
var.getValue();
}
造成這些習慣的原因很耐人尋味, 我猜想缺乏抽象能力似乎是最基本的原因, 畢竟為變量起一個名字也是最簡單的抽象步驟之一.