代码整洁之道 - 函数
这一章主要是说对函数的整洁
简单概况一下,一个整洁的函数包含以下几点
- 一个好函数名
- 只做一件事,并且做好这件事
- 短小精悍
- 参数尽量少
- 避免出现输出参数
- 避免重复代码
一个好函数名
好名称的标准:长而具有描述性的名称,要比短而令人费解的名称好,长而具有描述性的名称,要比描述性的长注释好。
使用某种命名规范,让函数名称的多个单次容易阅读。
一个好的函数名,应该能解释函数的意图,以及参数的顺序和意图
例如一元函数:函数和参数应该形成一种非常良好的动词/名称对形式。例如writeField(name),它就明确告诉我们,name是一个field,
只做一件事,并且做好这件事
判断是否做一件事一个方法就是看能否再拆出来一个函数。该函数不仅仅是单纯的重新诠释其实现
可以从以下几点入手
- 分割指令与询问
函数要么做什么事,要是回答什么事,不能二者兼得。函数要么修改对象的状态,或者返回对象的有关信息,两样都干会导致混乱。 - 无副作用
在一个函数中,做了两件事,但是名字上并没有体现出来,所以就导致可能出现副作用。 - 尽量避免标识参数
向函数中传入boolean值就是骇人听闻的,这样做,方法签名就变得复杂了。并且也说明了函数不止做一件事,true是这样做,false是那样做。
短小精悍
短小的好处就是一目了然。函数越短小,功能越集中,就越能取于一个好名称。建议函数长度20行封顶
可以从下面几点入手
- if ,else语句,while语句,代码块只有一行,这行大抵是一个函数调用语句。
这样不但保持函数短小,热情因为块内调用的函数具有较明确的说明名称,增加了文档上的价值 - 函数的缩进层级不应该多余两层,就是不应该内嵌两个{},最多嵌套一个
- 确保每个switch语句都处于在较低的抽象层级,并且永远不重复
可以使用抽象工厂解决switch语句的问题。创建多态对象,并且隐藏在某个继承关系中。在系统其它部分看不到。 - 使用异常替代返回错误码,这样可以减少深层次的嵌套
- 把try/catch代码块的主体抽离出来,另外形成函数。
- 错误处理也是一件事。一个函数中不能即处理正确的事情,又处理错误的事情。如果关键字try在某个函数中存在,它就该是这个函数的第一个单词,而且在catch/finally代码块后面不该有其他内容。
参数尽量少
零个最优,其次是一个,再次是两个,尽量避免三个,有足够特殊的理由才能用三个以上参数
因为参数不易理解,带有太多概念性。一个参数扫一眼就明白了,第二个参数就得思考一下才能明白。如果出现三个或者以上,就说明其中一些参数该进行封装了。
避免出现输出参数
因为我们习惯信息通过参数输入函数,通过返回值输出。而不希望通过参数输出。如果非要对输入参数进行转换的,转换结果体现到返回值上
避免重复代码
即DRY原则。
- 重复可能是软件中一切邪恶的根源。许多原则与实践都是为了控制与消除重复而创建的。
- 自子程序发明以来,软件开发领域的所有创新都是在不断尝试从源代码中消灭重复
- 遇到重复就开始封装吧
如何写这样函数
- 打磨代码
- 分解函数
- 修改名称
- 消除重复
- 缩短和重新安置方法
- 拆散类
每个函数,函数中的代码块,都应该有一个入口,一个出口,简单来说,就是函数只有一个return语句,循环中不能出现break或者continue,并且禁止出现goto语句。如果函数保持较小,偶尔出现return,break,continue,也不是可以的。
如果每个例子都让你深合己意,那就是整洁代码
搬运地址:
代码整洁之道
既已览卷至此,何不品评一二: