ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

代码入门第三篇--重构

2021-08-01 22:02:20  阅读:191  来源: 互联网

标签:重构 第三篇 return -- float int radius GetPerimeterByRadius PI


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有