jassonfish

导航

代码编写原则

遵循原则:

(1)函数最短原则(不多于30行)。

(2)变量单一职能原则(一个变量只允许承担一个责任,针对每次赋值,创建一个独立。对应的临时变量。循环变量和收集结果变量除外)。

(3)函数单一职能原则(一个函数只做一件事情)。

(4)for循环单一职能原则(一个for循环只做一件事情,也许你会考虑效率问题,但不经过测试是没有发言权的)。

(5)三次原则(事不过三,三则重构)。

代码的坏味道:

1. 重复代码(Duplicated Code)

(1)同一个类的两个函数含有相同的表达式,采用Extract Method(提炼函数)方法提炼重复的代码。

(2)两个互为兄弟的子类内含有相同表达式,采用Extract Method提取函数,使用Pull UP Method 放到超类内。如果代码之间只是类似,并非完全相同,那就用Extract Method将相似部分和差异部分割开,构成独立的一个函数。可运用Form Template Method 获取一个模板模式。

(3)如果两个毫不相关的类出现重复代码,应考虑Extract Class 将重复代码提炼到一个独立类中。

2. 函数过长(Long Method)

常用方法:

1.提炼函数(Extract Method):将某段代码放进一个独立函数中,并让函数名称解释该函数的用途。

2.内联函数(Inline Method):在函数调用点插入函数本体,然后移除该函数。

3.内联临时变量(Inline Temp):将所有对该变量的引用动作,替换为对它赋值的那个表达式自身。(某个临时变量被赋予某个函数调用的返回值)

4.以查询取代临时变量(Replace Temp with Query):一个临时变量保持某个表达式的运算结果,将这个表达式提炼成一个独立函数中,将这个临时变量的所有引用点替换为对新函数的调用。此后,新函数可以被其他函数使用。

5.引入解释性变量(introduce Explaining Variable):一个复杂的表达式可以将这个表达式(或者其中的一部分)的结果放进一个临时变量。以此变量名称来解释表达式用途。

6.分解临时变量(split temporary variable):某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集结果,针对每次赋值,创造一个独立,对应的临时变量。体现变量的单一职能原则。

7.移除对参数的赋值(Remove Assignment to Parameters):代码对一个参数进行赋值,应以一个临时变量取代该参数的位置。java采用的是值传递,函数体内对参数的改变都不会影响原来的值。

 

 

posted on 2014-01-21 17:57  jassonfish  阅读(1653)  评论(0编辑  收藏  举报