針對Code View
友好的代碼重構方法
本文記錄在開發過程中,寫出對 Code ReView
友好代碼的若干方法。
抽取函數
將較爲獨立的語句抽取爲函數,是一種很常見的重構手段,本文在此基礎上,進一步改進,形成對 Code Review
友好的代碼組織。
一句話概括:將抽取後的函數放在原函數較遠處,而不是直接放在原函數的上下。
下面來舉例說明:
假設有以下函數:
void ExtraceData(std::string& strInfo)
{
int a = 100;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1; // 模擬有很多操作
a += 1;
a += 1;
a += 1;
strInfo = std::to_string(a);
}
中間一大串可認爲是對數據進行加工,最後賦值給輸出參數。如果將中間一段抽取爲函數,按照現在重構工具的調性,會將抽取後的函數直接放在原函數之上,將抽取處替換爲對新函數的調用,形成下面的效果:
int Add(int a)
{
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
a += 1;
return a;
}
void ExtraceData(std::string& strInfo)
{
int a = 100;
a = Add(a);
strInfo = std::to_string(a);
}
從代碼上看,這樣一點問題也沒有。但提交查看代碼改動時,卻是這樣的:
從左右改動對比上看,要努努力,仔細看,才能看出來 Add
函數是重構提取的函數。出現這樣的原因是代碼對比工具是按行對比的,當前後行內容未改變時,會認爲未改變。
現在換另一種做法,將重構後的函數放在距離原函數稍遠處,會得到這樣的效果:
這種做法,可以將從視覺上,分離抽取函數的動作以及函數內部細節。從代碼對比結果上,一眼看出,本次改動是將左邊這塊代碼抽取爲名爲 Add
的函數,後續看到該函數,就有一個心理預期,如果不關心函數內部細節,可直接忽略。
- 對他人來說,提高代碼閱讀效率
- 對自己來說,減少出錯的可能
對人對己都有好處。
至於將重構後的函數,具體放在哪個位置,按照一般從上往下的代碼閱讀順序來,放在原函數的下方比較合理。這會讓閱讀者先看到該函數的使用場景,往下再看到具體實現,較符合認知,至於具體實現細節,有需要就關心,沒需要直接略過。
具體放多遠,看個人喜好,只要能從代碼前後對比中,分離調用和實現就行。
小結
本文提出從代碼提交的角度,提出一種重構代碼的組織方法。