1.短小:函数第一要则就是短小;
代码块和缩进:if\else\while等语句,其中的代码块应该只有一行,该行大抵相当于一个函数调用。这样不但能保持函数短小,而且因为函数的名称拥有较具说明性的名称,增加了文档上的价值。
2.只做一件事:函数应该只做一件事,做好一件事。
3.每个函数一个抽象层级:遵循向下规则:自顶向下读代码;
4.switch语句:对于switch语句,如果只出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其他地方看不到,就能容忍。
5.使用描述性的名称:如果每个例程都让你感到深合己意,那就是整洁的代码。选择描述性的名称能帮你理清你关于模块的设计思路,并帮你改进,追索好名称,有助于代码的改善重构。
6.函数参数:最理想的函数参数是零,其次是一、二,有足够特殊的理由再用三个以上的参数。
6.1).一元函数:函数使用一个参数有两个极普遍的理由:a.操作该参数,将其转换为其他数据;b.有输入,没有输出,参数用于改变某种状态;
6.2).标识函数:标识函数丑陋不堪,向函数传入布尔值大体宣布该函数不只做一件事,方法签名立刻变得复杂起来;
6.3).二元、三元函数:函数参数越多,要识别每个参数的意义,理解会越难;
6.4).参数对象:参数较多的时候,可以创建对象管理参数,从而减少参数数量,可读性更强;
6.5).参数列表:需要参数数量可变时,可以用参数列表传入;
6.6).动词与关键字:函数名称用动词+关键字命名,能较好的解释函数的意图;
7.无副作用:在只做一件事的过程中不要隐藏其他处理事项,如果有可以重新定义函数名称明确其功能。避免使用输出参数,如果,如果函数必须要修改某种状态,可以选择修改所属对象 的状态。
8.分隔指令与询问:函数要么做某一件事,要么回答某一件事,二者不可兼得。
9.使用异常替代返回错误码:从指令函数返回错误码可能导致深层次的嵌套结构。
9.1).抽离try catch代码:trycatch代码块很丑陋,搞乱了代码结构,把错误处理与正常处理混在一起;
9.2).错误处理就是一件事:函数只做一件事,错误处理也是如此;
9.3).Error.java:返回错误码通常需要定义相应的类或枚举,使用错误码的类都需要import该类或枚举,在新增或修改时所有的类就需要重新编译,这使得Error.java像依赖磁铁一样。
10.别重复自己:重复是代码变得冗余,可以抽象成新的方法替换那些重复的代码。
11.结构化编程:代码函数保持短小,每个代码块一个入口一个出口,避免使用goto语句。