說明
無副作用函數(shù),是指那些不使用類的成員,不使用全局變量變化的函數(shù)。
在進(jìn)行代碼重構(gòu)時(shí),因?yàn)椋?/p>
--可讀性:屏蔽一些信息(例如細(xì)節(jié)實(shí)現(xiàn)或概念封裝),來提高可讀性
--降低圈復(fù)雜度:為了代碼復(fù)雜度,抽取的一些函數(shù)
等改良性設(shè)計(jì),而抽取了不少功能比較簡(jiǎn)單的函數(shù)。如果對(duì)這些函數(shù)進(jìn)行改造,便可形成無副作用的函數(shù)。無副作用的函數(shù),不歸屬于某個(gè)類,可以單獨(dú)cpp中實(shí)現(xiàn)。注意的一點(diǎn)是實(shí)現(xiàn)必須放在引用的前面。
好處是很明顯的:由于不修改頭文件,不會(huì)因?yàn)橹貥?gòu)來修改類的定義(甚至使類附加很多額外信息,使類功能腐化),從影響外部使用(即使是私有函數(shù),外部也需要重新編譯);提取的無副作用函數(shù)方便TDD單元測(cè)試,避免霰彈式修改,無法進(jìn)行單元測(cè)試?yán)Ь?b>。
舉例
使用無副作用函數(shù)改良代碼,只需要修改cpp,無需修改頭文件。如下例子:

修改前代碼

修改后代碼
小結(jié)
在維護(hù)已經(jīng)存在大量代碼的系統(tǒng)時(shí),可以通過提取副作用函數(shù)的思路,來改良代碼。不僅可以顯露系統(tǒng)主干,便于理解系統(tǒng)代碼;另外提取函數(shù)很容易進(jìn)行單元測(cè)試,從而保證重構(gòu)的質(zhì)量。