C++函数式编程(四)面向对象编程

原文: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()等等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值