说明
无副作用函数,是指那些不使用类的成员,不使用全局变量变化的函数。
在进行代码重构时,因为:
--可读性:屏蔽一些信息(例如细节实现或概念封装),来提高可读性
--降低圈复杂度:为了代码复杂度,抽取的一些函数
等改良性设计,而抽取了不少功能比较简单的函数。如果对这些函数进行改造,便可形成无副作用的函数。无副作用的函数,不归属于某个类,可以单独cpp中实现。注意的一点是实现必须放在引用的前面。
好处是很明显的:由于不修改头文件,不会因为重构来修改类的定义(甚至使类附加很多额外信息,使类功能腐化),从影响外部使用(即使是私有函数,外部也需要重新编译);提取的无副作用函数方便TDD单元测试,避免霰弹式修改,无法进行单元测试困境。
举例
使用无副作用函数改良代码,只需要修改cpp,无需修改头文件。如下例子:
小结
在维护已经存在大量代码的系统时,可以通过提取副作用函数的思路,来改良代码。不仅可以显露系统主干,便于理解系统代码;另外提取函数很容易进行单元测试,从而保证重构的质量。