避免纯函数的副作用
一个好编程的一般准则是封装.函数应仅访问他们完成任务所需要的并应在远处最小化副作用及行动.
如何做...
采取如下步骤来避免纯函数的副作用:
尽量用纯注解标记函数.它可在中类型,名,和实参列表周围.
编译.编译器将告诉你你需要关注的函数.
尽量带常或不变对象.如你不会存储到他们的引用,在你形参中用进或区域关键字.
为允许大多数函数为纯,避免用全局(模块级或局部用静标记)变量.
如果函数是基于编译时实参的条件纯,你不必用纯关键字显式标记它.按规则编译器将在使用时基于其实参的纯洁推断其纯度.
如果你需要在纯函数内调用一个不纯函数,例如,来调试,你可用调试语句这样:调试写行("调试打印");.考虑如下代码片:
提示
如同其他注解,你也可写纯:在模块顶来应用到所有函数或用大括号来立刻标记许多函数纯.然而,没有不纯关键字,所以如果你这样,你将把模块其余部分锁至纯洁!
它如何工作...
在D中的纯函数禁止访问可变全局数据或调用不纯函数.对这些一般规则有两个例外:总允许在纯函数内带新的GC内存分配,及在调试语句中允许不纯函数.其他语言特征,包含允许局部变量的变化,与其他函数相同.D对待函数编程为整体设计,而不是函数内实现风格.
一个带多个可变实参的纯函数叫弱纯函数.弱纯函数对来自其他语言的程序员很奇怪,因为他们允许传递给它的数据的变化.
纯函数好处是静态保证纯函数的结果仅依赖你显式传递给它的数据,使其所有要求在调用时很明显并限制你必须看的代码数来理解程序的当前状态.
领取专属 10元无门槛券
私享最新 技术干货