代码重构技术方法

我是一个程序猿。我相信很多程序猿也有过同样的经历。在别人的公司骂烂代码。一边说,比其他人的代码更烂。

守则没有开始恶化。代码恶化可具有以下

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 users
		Collections.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有两个作用,意义不明白。easy产生岐义

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、又一次组织代码。变量定义与使用的跨度不要过大。即在使用时再定义。更easy理解

重构前代码

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

时间: 2024-10-12 02:13:55

代码重构技术方法的相关文章

代码重构技巧方法

我是一个程序员.相信很多的程序员也有过同样的的经历,在公司一边骂别人的代码烂,一边写着比别人更烂的代码. 代码并不是一开始就变坏,代码变坏有以下可能 1.需求变更 2.维护代码的人的水平参差不齐 3.维护人员流动大 4.开发周期短,交付时间紧急 5.个人习惯 6.管理者对代码的要求 以上都是有可能使代码变坏的可能,那么如何写出好的代码?除了个人编程能力外还需要有一定的技巧,以下就是总结前人的经验 得来的,需要在编程中养成一种好习惯,让写好代码成为一种习惯吧!!!!! 1.使用卫语句 在什么情况下

java代码重构的方法学习

2,8阅读 第一章  第一个案例 在此案例中使用了, 方法的提取(extract method),方法的移动(move method),临时变量的清除,变量及函数名重构,switch类型重构(replace type code with state/strategy)等. 重构使得代码功能更加好的被复用,偏于维护和修改. 注意: switch语句的属性尽量不要是另一个对象的数据,最好在自己的数据基础上进行 第二章 重构原则 何为重构:(名词)不改变软件可观察行为的前提下,提供可理解性,降低其修改

代码重构之谈

何谓重构 重构是: 为了是代码更易于维护和修改,在一系列小的.语义不变的代码转换(即是代码保持正常工作)中重组.重排代码. 重构不只是任意的调整 代码必须仍能正常工作 小步骤仅使语义被保留(即不是一个重大改写) 单元测试来证明代码仍然有效 代码是 更松散的耦合性 功能更聚集的模块 更容易理解的 有很多人所共知的重构技术 你至少应该在Do yourself之前,多多少少熟悉一些 设计重构"条款" 何时重构 你应该重构: 当你看到一个更好的方式来来做同一件事的任何时候 "更好&q

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(十一) 代码重构使用反射工厂解耦

前言 自从此博客发表以及代码开源以来,得到了许多人的关注.也没许多吧,反正在我意料之外的.包括几位大牛帮我做订阅号推广,真的很感谢他们.另外,还有几个高手给我提了一些架构上的问题.其实本身这个项目是没有做什么架构设计的.只是简单分了分层.不过我在经过仔细思考之后决定对项目架构做些调整,当然在我的技术范围之内,我相信还会有第二次,第三次甚至更多重构,我希望把他变得更加完美. 重构思路 对于重构思路,我首先想到的是,让程序能够支持多种数据库,比如我现在用的是SQLServer,而好多朋友用MySQL

我们需要循序渐进的代码重构

对于如何进行代码重构,一直有着很多种说法.很多人都认为应该将重构代码放在backlog里.但是其实,这并不是一个理想的方法. 在项目刚刚开始的时候,你的代码很干净. 即使有的时候需要小小的绕一下路,但是这个时候我们可以轻松.平稳的添加功能.这个阶段一般都不会出现问题,而且由于我们比较着急,所以即使出现了一些小问题,我们也不会注意到. 然而,随着项目做的时间变长,这些小的问题就会累计起来.这就是人们所说的"技术债务".其本质,就是并不算特别好的代码,但是这个时候其问题还没有完全显现出来.

第五次作业2、请将该code进行代码重构,使之模块化,并易于阅读和维护;

1.请运行下面code,指出其功能: (需附运行结果截图,并用简短文字描述其功能) 显示了人的姓名.年龄 2.请将该code进行代码重构,使之模块化,并易于阅读和维护: 3.观看视频The Expert (Short Comedy Sketch),写出观后感(内容是什么,说明了什么问题,有什么启示),提交到博客! The Expert (Short Comedy Sketch)内容是:一个工程师在一群完全什么技术都不懂的CEO,产品经理和设计师面前…… 说明了什么问题,有什么启示: 看了这个视频

设计模式与代码重构——ios篇

有一阵子没写技术分享文了,最近每个月写一篇个人空间日记.主要是觉得自己技术比较一般写不出有质量的东西,误人子弟.互联网信息膨胀,让我们获取信息更加便捷,然而获取个人所需的正确信息,却需要每个人具备更强的搜索能力.搜索能力作为代码,就需要更优的算法.算法就像是程序的CPU,决定着程序的运行效率. 与其说电脑改变了世界,不如说是电脑改变了人类改变世界的效率.电脑其实是根据人脑设计的,而程序思想和人的思想相通,所以一个程序员在学会一门语言后,学习第二门语言会来的容易很多,因为编程思想是相通的.我认为,

代码重构的必要性分析及实施建议

代码重构在软件开发过程中,是一项重要非紧急的工作.但大多数情况下,人们都会因为其非紧急,而忽略其重要性.等到代码重构演变成重要且紧急的工作时,一般就只有放弃了,因为由于长期的技术欠债,此时代码已经变得无法扩展,成为一堆僵死的代码. 代码重构的重要性 代码重构是为了使代码具有很好的可读性.可维护性.可扩展性.可重用性. 为什么要进行代码重构? 代码在演化过程中,会由于各种不同的原因,不断产生bad smell.如果不及时清理,bad smell会不断积累,代码逐渐腐化,最终导致代码不可用. 代码腐

Java程序员代码重构需要循序渐进

对于如何进行代码重构,一直有着很多种说法.很多人都认为应该将重构代码放在backlog里.但是其实,这并不是一个理想的方法. 在项目刚刚开始的时候,你的代码很干净. 即使有的时候需要小小的绕一下路,但是这个时候我们可以轻松.平稳的添加功能.这个阶段一般都不会出现问题,而且由于我们比较着急,所以即使出现了一些小问题,我们也不会注意到. 然而,随着项目做的时间变长,这些小的问题就会累计起来.这就是人们所说的"技术债务".其本质,就是并不算特别好的代码,但是这个时候其问题还没有完全显现出来.