函数
PPG007 ... 2021-12-26 About 2 min
# 函数
# 短小
- 函数不应该大到足以容纳嵌套结构。
- 函数的缩进层级不该多于一层或两层。
# 只做一件事
- 要判断函数是否不止做了一件事,就是看是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。
- 只做一件事的函数无法被合理地切分为多个区段。
# 每个函数一个抽象层级
- 保证同一个函数中的方法抽象程度的相近,从高度抽象慢慢向下到具体实现,这样就能实现代码自顶向下阅读。
# 使用描述性的名称
- 名称不必担心太长,要使名称中的多个单词容易读。
- 函数名应当是动词名词的形式,解释函数的作用。
- 命名方式要保持一致,近义词选定一个就不应再使用其它。
# 函数参数
- 参数列表不宜过长。
- 参数越多测试越复杂。
- 如果一个函数的逻辑收到参数中某个标志的影响,那么应当拆分这个函数,去掉这个标记。
- 多元函数要注意参数的顺序,或者想方法变回一元函数。
- 当函数的参数过多时,应当考虑将参数封装成对象。
# 无副作用
- 函数的实际行为应当与名字描述的一致,不应当有其他行为。
- 如果一个函数必须要改变一下东西,那么就修改它所拥有的属性即可。
# 分隔指令与询问
一个函数要么做什么事,要么回答什么事,不要既回答(返回值)又去做事(修改),这回导致歧义。
# 使用异常替代返回错误码
- 当遇到错误时,不应当立即在逻辑中处理,抛出异常在异常处理中集中处理,将错误处理代码从主路径代码中抽离出来。
- try、catch代码块可以从一个函数中提取出来单独组成一个函数。
- 使用异常可以避免使用错误枚举类,在扩展时只要扩展异常类即可。
# 别重复自己
- 当一个算法在多个方法中都被使用时,如果需要修改算法就需要修改多个方法,应当将重复的部分抽离出来。
# 其它
- goto只有在大函数中才有意义,小函数避免使用。
- 不必试图在最开始就将所有代码设计的完美无缺,编写完后再仔细打磨。