函数式编程取代面向对象?你也许根本不懂面向对象

        看了一篇吹捧函数式编程取代面向对象编程的帖子(详见以下链接),忍不住上来吐个槽。

        链接:拥抱函数式编程吧,用得非常爽!_Java技术栈的博客-CSDN博客

        感觉该文的作者根本就不懂面向对象,竟然会说出多态是配角这样的话!然而,多态才是面向对象最重要的特性,继承和封装反倒就像吃饭睡觉一样,只是面向对象的一个基础罢了。关于多态,我放在最后讲。

        文中对于继承的批判我大致认同,但这并不表示函数式编程就能解决这一问题,反倒是大量的组合所带来的命名空间容易导致代码的冗余度大幅提升,也更丑陋。同时,由于没有对象这一统一的存储介质,还会造成各种函数闭包的消耗,调试也变得更加困难。

        类的继承虽然有文中的这些问题,但只要不像java框架那样搞的如此臃肿,嵌套如此之深,实际上是不太会遇到的。常见的困难反倒是多重继承,但Unity里采用的EC结构(实体-组件)就是解决多重继承问题很好的方案。

        其次,说到封装,我根本就没看明白文中说的引用问题到底是啥玩意儿,或者根本就是作者自己滥用所导致的问题。关键是,你看似在说面向对象的封装不够好,但你函数式编程根本就没!法!封!装!只能可怜兮兮的用个闭包来保护局部变量,即没法扩展,也未必安全。

        最后,来说说面向对象的杀手锏——多态。相信习惯函数式编程的人最头疼的就是一个功能里某个环节需要能根据具体情况做不同的处理,但你们想破头也只能想出加个hook函数来提供给外面动态指定。而你们想要的这个功能,就是面向对象最基础的多态特性,而且更美好的是,多态还能通过继承来被复用和重置,相比你们的hook只能每次在调用前指定,是不是简洁多了,优雅多了?你说气人不气人?

        最后,总结一下,在我看来,喜欢并推崇函数式编程,并同时觉得高面向对象一等的程序员,多半是因为没学透面向对象,自己用不好罢了。我倒并不是说函数式编程不好,但要说取代面向对象,那还是嫩了点!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值