代码重构技巧方法
来源:互联网 发布:asp.net 字符串转json 编辑:程序博客网 时间:2024/05/17 23:31
我是一个程序员。相信很多的程序员也有过同样的的经历,在公司一边骂别人的代码烂,一边写着比别人更烂的代码。
代码并不是一开始就变坏,代码变坏有以下可能
1、需求变更
2、维护代码的人的水平参差不齐
3、维护人员流动大
4、开发周期短,交付时间紧急
5、个人习惯
6、管理者对代码的要求
以上都是有可能使代码变坏的可能,那么如何写出好的代码?除了个人编程能力外还需要有一定的技巧,以下就是总结前人的经验
2、提炼方法
当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就应该将这段代码放进一个独立函数中,是最常用的重构手法
之一,那么什么情况下可以提炼方法呢
一、重复代码
二、使用助手方法,就是把注释部分提炼成一个函数,如下
重构前
四、以查询取代临时变量,如果把临时变量替换为一个查询,那么同一个类中的所有函数都可以获得这份信息;如下
重构前代码
重构前代码
参考资料:
代码并不是一开始就变坏,代码变坏有以下可能
1、需求变更
2、维护代码的人的水平参差不齐
3、维护人员流动大
4、开发周期短,交付时间紧急
5、个人习惯
6、管理者对代码的要求
以上都是有可能使代码变坏的可能,那么如何写出好的代码?除了个人编程能力外还需要有一定的技巧,以下就是总结前人的经验
得来的,需要在编程中养成一种好习惯,让写好代码成为一种习惯吧!!!!!
1、使用卫语句
在什么情况下可以使用卫语句呢,如下
public void add(Object element) {if (!readOnly) {int newSize = size + 1;if (newSize > elements.length) {Object[] newElement = new Object[elements.length + 10];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}elements = newElements;}elements[size++] = element;}}使用卫语句重构后,如下
public void add(Object element) {if (readOnly)return;int newSize = size + 1;if (newSize > elements.length) {Object[] newElement = new Object[elements.length + 10];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}elements = newElements;}elements[size++] = element;}这样嵌套就少了一层,降低复杂度
2、提炼方法
当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就应该将这段代码放进一个独立函数中,是最常用的重构手法
之一,那么什么情况下可以提炼方法呢
一、重复代码
二、使用助手方法,就是把注释部分提炼成一个函数,如下
public List getUsers(){List users = new ArrayList<User>();//.........//sort by most recently registered usersCollections.sort(users, new User.UserComparatorByDescendingRegistration());return users;}提炼方法之后
public List getUsers(){List users = new ArrayList<User>();//.........sortByMostRecentlyRegistered(users);return users;}三、函数结构层次单一,如下
重构前
void printOwing(double amount){ printBanner(); System.out.println("name:" + _name); System.out.println("amount" + amount); }重构后
void printOwing(double amount){ printBanner(); printDetails(amount); }
四、以查询取代临时变量,如果把临时变量替换为一个查询,那么同一个类中的所有函数都可以获得这份信息;如下
重构前代码
public double getPrice(){ double basePrice = _quantity*_itemPrice; if (basePrice > 1000){ return basePrice * 0.95; }else{ return basePrice * 0.98; } }重构后代码
public double getPrice(){ if (BasePrice() > 1000){ return BasePrice() * 0.95; }else{ return BasePrice() * 0.98; } } private int BasePrice(){ return _quantity* _itemPrice; }3、变量作用单一,如下代码的avg有两个作用,意义不明确,容易产生岐义
private double calculateAverage(){Iterator grades = clines.iterator();double avg = 0.0;while(grades.hasNext()){grade = (CourseGrade)grades.next();if(!(grade.grade == "F")){avg = avg + grade.grade - 64;}}avg = avg / clines.size();return avg;}4、重新组织代码,变量定义与使用的跨度不要过大,即在使用时再定义,更容易理解
重构前代码
MARKETING_DATA *marketingData = new MARKETING_DATA; SALES_DATA *salesData = new SALES_DATA; TRAVEL_DATA *travelData = new TRAVEL_DATA; travelData.ComputeQuarterly(); salesData.ComputeQuarterly(); marketingData.ComputeQuarterly(); salesData.ComputeAnnual(); marketingData.ComputeAnnual(); travelData.ComputeAnnual(); salesData.print(); travelData.print(); marketingData.print();重构后代码
MARKETING_DATA *marketingData = new MARKETING_DATA; marketingData.ComputeQuarterly(); marketingData.ComputeAnnual(); SALES_DATA *salesData = new SALES_DATA; salesData.ComputeQuarterly(); salesData.ComputeAnnual(); salesData.print(); TRAVEL_DATA *travelData = new TRAVEL_DATA; travelData.ComputeQuarterly(); travelData.ComputeAnnual(); travelData.print();
参考资料:
1、http://www.cnblogs.com/matchcolor/archive/2010/08/02/1784888.html
0 0
- 代码重构技巧方法
- 代码重构技巧
- 代码重构技巧
- 代码重构技巧
- 代码重构技巧
- 代码重构技巧
- JavaScript代码重构技巧
- 代码重构的技巧
- 【JAVA】代码重构技巧
- 代码重构方法
- 代码重构方法
- 一个重构代码的小技巧
- C#代码重构技巧总结
- 代码重构的方法
- 代码重构的方法
- 代码重构方式方法
- 重构代码 02 构建方法
- java代码重构方法总结
- 第二章第一题
- NYOJ---题目204Coin Test
- Linux下nginx支持.htaccess文件实现伪静态的方法!
- android笔记--JSON数据解析
- java中switch语句的case中不能抛出异常?
- 代码重构技巧方法
- 准备蓝桥杯--dyx--杨辉三角形
- HDU(3787)——A+B
- 批处理实现添加java环境变量
- 如何组装配置属于自己的台式机
- (1183)SCU
- 欧几里德算法(最大公约数)
- android 解析json数据格式
- Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示