针对`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);
}
从代码上看,这样一点问题也没有。但提交查看代码改动时,却是这样的:
从左右改动对比上看,要努努力,仔细看,才能看出来 Add
函数是重构提取的函数。出现这样的原因是代码对比工具是按行对比的,当前后行内容未改变时,会认为未改变。
现在换另一种做法,将重构后的函数放在距离原函数稍远处,会得到这样的效果:
这种做法,可以将从视觉上,分离抽取函数的动作以及函数内部细节。从代码对比结果上,一眼看出,本次改动是将左边这块代码抽取为名为 Add
的函数,后续看到该函数,就有一个心理预期,如果不关心函数内部细节,可直接忽略。
- 对他人来说,提高代码阅读效率
- 对自己来说,减少出错的可能
对人对己都有好处。
至于将重构后的函数,具体放在哪个位置,按照一般从上往下的代码阅读顺序来,放在原函数的下方比较合理。这会让阅读者先看到该函数的使用场景,往下再看到具体实现,较符合认知,至于具体实现细节,有需要就关心,没需要直接略过。
具体放多远,看个人喜好,只要能从代码前后对比中,分离调用和实现就行。
小结
本文提出从代码提交的角度,提出一种重构代码的组织方法。