針對`Code View`友好的代碼重構方法

針對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);
}


從代碼上看,這樣一點問題也沒有。但提交查看代碼改動時,卻是這樣的:

使用重構工具提取函數.jpg

從左右改動對比上看,要努努力,仔細看,才能看出來 Add 函數是重構提取的函數。出現這樣的原因是代碼對比工具是按行對比的,當前後行內容未改變時,會認爲未改變。

現在換另一種做法,將重構後的函數放在距離原函數稍遠處,會得到這樣的效果:

使用重構工具提取函數後改變函數位置1.jpg

使用重構工具提取函數後改變函數位置2.jpg

這種做法,可以將從視覺上,分離抽取函數的動作以及函數內部細節。從代碼對比結果上,一眼看出,本次改動是將左邊這塊代碼抽取爲名爲 Add 的函數,後續看到該函數,就有一個心理預期,如果不關心函數內部細節,可直接忽略。

  • 對他人來說,提高代碼閱讀效率
  • 對自己來說,減少出錯的可能

對人對己都有好處。

至於將重構後的函數,具體放在哪個位置,按照一般從上往下的代碼閱讀順序來,放在原函數的下方比較合理。這會讓閱讀者先看到該函數的使用場景,往下再看到具體實現,較符合認知,至於具體實現細節,有需要就關心,沒需要直接略過。

具體放多遠,看個人喜好,只要能從代碼前後對比中,分離調用和實現就行。

小結

本文提出從代碼提交的角度,提出一種重構代碼的組織方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章