方法 vs 函数
正确使用函数和方法,对于编码十分重要。
- 函数是数据加工流程蓝图。
- 引起函数变化的应该(最好)只有参数。
- 方法面向数据,维护和展现其状态。
- 多次调用或不同调用次序导致不同输出结果。
- 多个方法共同维护状态,存在耦合和关联性。
方法带来很多设计层面上的概念,方法可以看成是函数的一种包装,在实现层面方法是函数的语法糖。
在汇编角度来看,方法和函数没多大区别,方法是高级语言语法糖。在设计角度或者思想层面看,方法和函数有很大不同。函数实际上描述的是一个加工流程蓝图,它在程序运行期创建堆栈帧用于存储状态,把数据或者参数加入工艺流程里得到结果,它更注重算法过程。函数最好的设计是函数本身是固定的,相对来说容易通过单元测试把代码固化或者冻结起来,它本身变化只有一种,传递什么参数得到什么结果,所有的变化只和参数有关系。
方法面向数据,当方法和某一个数据绑定的时候,这个方法的生命周期和这个数据有关系。方法的核心是数据,修改数据和展现数据,方法的内容围绕着数据进行不应该超出数据之外。例如增加计数器每次调用都会导致结果不一样,调用次数和次序不同导致结果也不同。设计一个算法最好的方式是设计成一个函数,它本身是无状态的,选择函数还是选择方法关键在于设计一个加工算法还是围绕着数据。设计方