针对`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 的函数,后续看到该函数,就有一个心理预期,如果不关心函数内部细节,可直接忽略。

  • 对他人来说,提高代码阅读效率
  • 对自己来说,减少出错的可能

对人对己都有好处。

至于将重构后的函数,具体放在哪个位置,按照一般从上往下的代码阅读顺序来,放在原函数的下方比较合理。这会让阅读者先看到该函数的使用场景,往下再看到具体实现,较符合认知,至于具体实现细节,有需要就关心,没需要直接略过。

具体放多远,看个人喜好,只要能从代码前后对比中,分离调用和实现就行。

小结

本文提出从代码提交的角度,提出一种重构代码的组织方法。

posted @ 2022-08-18 09:38  浩天之家  阅读(43)  评论(0编辑  收藏  举报