其他分享
首页 > 其他分享> > 代码入门第三篇--重构

代码入门第三篇--重构

作者:互联网

1.数据类型重构

1. 使用具名常量代替神秘数值

使用常量来代替直接使用数值,可以让代码更具可读性,可扩展性

//传入int类型的半径,计算半径对应的圆的周长
float GetPerimeterByRadius(int radius){
	return 3.14 * 2 * radius;
}
//传入int类型的半径,计算半径对应的圆的面积
float GetPerimeterByRadius(int radius){
	return 3.14 * radius * radius;
}

假如现在要把π 具体到小数点后4位,则需要把所有3.14改成3.1415,也就是说你需要修改N个地方的代码,但是如果你“使用常量代替数值”,使用PI来代替3.14,其他的地方只要拿到这个PI,那么,下次修改的时候,你只需要改这个地方就好了

// PI = 3.1415 此处不具体到在哪里定义π了
//传入int类型的半径,计算半径对应的圆的周长
float GetPerimeterByRadius(int radius){
	return  2 * PI * radius;
}
//传入int类型的半径,计算半径对应的圆的面积
float GetPerimeterByRadius(int radius){
	return PI * radius * radius;
}

2.用更明确或者更准确的名字来命名变量

使用准确的名字来代表变量,可以让程序员不需要在具体了解这个变量是用来做什么的,从哪里来的


3.用函数来代替表达式

当其它地方有需要用某个计算方式求值的时候,可以把它改成函数,直接调用函数计算值,不仅能使代码读起来简单,还更利于扩展,参照本文第 1 个例子的PI,只是这里是替换方法

float GetPerimeterByRadius(int radius){
	return 2 * PI * radius;
}

4.将多用途变量转化为多个单一用途变量

减少变量涉及到的其它用途,避免相互之间造成影响,在使用变量前的位置声明初始化变量


5.使用局部变量,实现局部用途,而不是直接使用参数

意思是说,你传进去的参数不要直接用(修改它的值,读取是可以的),声明一个临时变量,把参数的值赋值给它,然后使用这个临时变量

//错误例子
float GetPerimeterByRadius(int radius){
	//需求:偷偷让半径加1
	radius += 1;//不能直接使用
	return 2 * PI * radius;
}

//正确例子
float GetPerimeterByRadius(int radius){
	//需求:偷偷让半径加1
	int tempRadius =radius + 1;//临时变量存储
	return 2 * PI * tempRadius ;
}


2.语句级重构

1.分解布尔表达式,将复杂布尔表达式转化成命名准确的布尔函数

此处的意思是把布尔表达式分解,使其每个布尔值都能更具体的表现出来

//判断是否要谈恋爱
if( 帅 或 高 或 富 ){
	//和他谈恋爱
}else{
	//你是好人,但是我们不合适
}

//按照标题改进:
bool 条件好 = 帅 或 高 或 富 ;
if( 条件好 ){
	//和他谈恋爱
}else{
	//你是好人,但是我们不合适
}

闲话:中英混编举例好像挺


2.合并条件语句不同,部分中的重复代码片段


3.方法、函数级重构

1.提取子程序或者方法

与 1.3 用函数来代替表达式 类似


2.参数的增加和删除、合并

增:当传入的数据增加的时候,可以更方便执行代码、理顺逻辑,不妨多添加一个参数

删:当传入的参数并没有用到的时候,考虑一下要不要把它删了

合并:当传入的参数可以合并(构成一个结构体或类),可以考虑把它们合并起来,传参数的时候只需要传一个进去就好了

3.将函数的操作区分开来,避免在一个函数中进行一种操作,然后又进行另一种操作

一个函数,应当只进行一种操作,在一个函数内进行过多的处理,会混淆其作用;
简而言之:搞不懂它在做什么

//规范示例
Data data = GetDataById(id); //只读数据
Result result = GetResultByData(data); //解析数据
print(result);

4. 类重构

使用不多,此处暂不做

标签:重构,第三篇,return,--,float,int,radius,GetPerimeterByRadius,PI
来源: https://blog.csdn.net/weixin_40204921/article/details/119303362