概述
原文:http://www.altdevblogaday.com/2012/04/26/functional-programming-in-c/
作者:John Carmack
-潘宏 译
-2013年1月
-email: popyy@netease.com
-weibo.com/panhong101
Michael Feathers@mfeathers 面向对象通过封装活动的部分而让代码可理解。函数式编程通过将活动的部分减至最少而让代码可理解。
所谓“活动的部分”就是指变化的状态。在一般的OOP基础书籍中,作者往往开始都会讲如何让对象改变自身,程序员们对此也都记忆犹新。然而,这却是一种反函数式的行为。没错,将函数和它们要操作的数据都打到一起,这种基本OOP思想是很有意义的。但是,如果你希望在代码中加入一些函数式程序,并从中获得优势,你只得在那些地方避免OO行为。
从定义上说,非const成员函数不是纯函数,因为它可能会改变类对象的状态。它也不是线程安全的,很容易让对象不知不觉进入意外状态,成为bug的温床。
const成员函数从技术角度讲是纯函数,前提是不考虑函数中的隐式const this指针可能会被用来改变对象状态。但有些对象很大,以至于自己都可以称得上构成了一个全局环境,这一点削减了一些纯函数的优势。构造函数可以是纯函数,而且最好能做成纯函数-只接受参数然后返回一个对象。
在开发战略级别上,你可以经常以一种更函数式化的方式处理对象,但可能需要改变一些接口。比如在id,我们有个用了十来年的类idVec3,其中包含一个改变对象自身的方法void Normalize(),而不是相应的idVec3 Normalized() const方法。很多字符串方法也只是改变对象自身,而不是返回一个处理结果的拷贝,比如ToLowerCase(),StripFileExtension()等等。
最后
以上就是苹果御姐为你收集整理的C++函数式编程(四)面向对象编程的全部内容,希望文章能够帮你解决C++函数式编程(四)面向对象编程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复