代码整洁之道--函数
函数
短小,函数的第一规则就是短小。
每个函数都一目了然,每个函数都只说一件事。
而且,每个函数都依序把你带到下一个函数。
这就是函数短小应该达到的程度。
代码块和缩进
if语句、else语句、while语句
只做一件事
函数应该做一件事,做好这件事,只做一件事。
只做一件事的函数用起来应该是最方便的,复用性最好的。
是大的组合的基本单元。
每个函数一个抽象层级
要确保函数只做一件事,函数中的语句都要在同一抽象层级上。
自顶向下度代码:向下规则j
我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表时,就能循抽象层级向下阅读了。
switch语句
使用描述性的名称
命名方式要保持一致,使用与模块名一脉相承的短语名称或者动词给函数命名。
函数参数
最理想的参数数量是0参数,其次是一,再次是二,应该尽量避免三
一元函数的普遍形式
标识参数
二元函数
参数对象
如果函数看来需要两个三个或者三个以上参数,
就说明其中一些参数应该封装为类了。
参数列表
动词与关键词
给函数取个好名字,能较好的解释函数的意图,以及参数的顺序和意图。
无副作用
古怪的时序性耦合及顺序依赖
都有可能出现在,函数多做无关的事情
典型的案例,在进行用户密码校验时,初始化了session对象。
在会话开始是可以的,在其他的地方就会有可能导致程序出错。
输出参数
分割指令与询问
函数要么做什么事,要么回答什么事,但是二者不可都做。
使用异常替代返回错误码(应当这么做)
从指令式函数返回错误码违反了指令与询问分隔的规则。
抽离Try/Catch代码块
Try/Catch代码块丑陋不堪,他们搞乱的代码结构,把错误处理和正常流程混为一谈。
最好把try/catch代码块主体部分抽离出来,另外形成函数。
错误处理就是一件事
函数应该只做一件事,错误处理就是一件事,因此处理错误的函数不该做其他事。
Error.java依赖磁铁
返回错误码通常暗示有个类或者枚举,定义了所有错误码。
这样的类就是一块磁铁,其他许多类都得导入和使用它。
当Error枚举修改时,所有其它的类都需要重新编译和部署。
使用异常代替错误码,新异常就可以从异常类派生出来,无需要重新编译或重新部署。
别重复自己
重复会导致代码臃肿,当需要改变时,要改变多次,增加了错误产生的几率。
重复可能是软件中一起邪恶的根源,许多原则与实践规则都是为控制与消除重复而创建。
结构化编程
遵循Edsger Dijkstra 的结构化编程规则
每个函数、函数中的每个代码块都应该有一个入口、一个出口。
函数中只有一个return瑜伽,循环中不能有break或continue语句,而且永远不能有任何goto语句。
但是小函数中,偶尔出现的return break或continue语句,比单入单出原则更具有表达力,没有坏处。
如何写出这样的函数
写代码和写被动东西很像,先想什么写什么,然后再打磨
写函数是,一开始都冗长而复杂,有太多缩进和嵌套循环,有过长的参数列表,名称是随意取的,也有重复的代码
然后打磨这些代码,分解函数就、修改名称、消除重复,缩短和重新安置方法,有事还拆散类。
最后遵循本章列出的规则,组装好这些函数。
并不从一开始就按照规则写函数,没人做得到
大师级程序员把系统当作故事来讲,而不是当作程序来写。
他们使用选定编程语言提供的工具构建一个更为丰富更具表达力的语言,用来讲那个故事。
那种领域特定语句的一个部分就是描述在系统中发生的各种星湖的函数层级。
遵循这些规则,函数会短小,有个好名字,而且被很好的归置,
真正的目标在于讲述系统的故事,而你编写的函数必须干净利落的拼装到一起,
形成一种精确而清晰的语言,帮助你讲故事。
上一篇: 代码整洁之道--命名
下一篇: 自定义主键生成策略