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