近期与同事讨论,函数式(FP)正在缓慢取代面向对象(OOP)?

345 天前
 raycake
请关注问题,别抨击提题问题的人和问题本身(狗头保命)。
10960 次点击
所在节点    程序员
90 条回复
kaedea
344 天前
谁也取代不了谁,所以谁也别看不起谁,反正不久都会被 prompt 式编程取代。
voya
344 天前
不存在谁取代谁,仅仅是手边工具,怎么方便怎么来,有问题的是刻意追求模中模式最后本末倒置,函数式就像积木,面向对象像工厂的模具,都有优势场景
dawn009
344 天前
函数式和面向对象不冲突。面向对象仅仅是一种数据封装方式。
inframe
344 天前
锤子、扳手、锯子,哪个好用用哪个,一起用也可以
james122333
344 天前
@jeesk

我说了那么多不就是为了好开发...
xFrye
344 天前
这两者不应该是对立关系而是互补,根据实际需要来选择解决方案
yikyo
344 天前
看到讲 oop 的,请问现实公司有用 ddd (领域驱动开发)的吗?实际意义大不大,当年看了很多遍,还是没理解核心思想
mocococ
344 天前
还是面向对象好用;函数式的话,写太多函数,需要时来调用不同的函数,增加心智负担。

New 一个对象让他来帮你实现功能不是更好么,交给它处理就好了,不同的功能用不同的对象。最好是接口,一眼便看清该接口的所有功能,还可以根据情况实现不同的细节。

接口的实现,才来调用函数式,这样最好理解和管理,两者结合使用最好了。
jojobo
344 天前
之前面试的时候被问到过,回答的不好
charlie21
344 天前
OOP 擅长的是责任划分, 它是一种完全符合 SOLID 原则里的 S: Single responsibility principle 单一职责原则 的应对策略

函数式 擅长的是 清除副作用,用纯函数来清除副作用

这是两个层面的 互不干扰也无法互相替换。

在大型架构里 (即使不用 OOP )也要有明确的职责划分方法,否则不够大型。

在时尚界,函数式代表了时尚,尽管它能做到的东西 用别的方法也能做到,但函数式可以给出十分简明清晰的 API (因为它在清除副作用,它往往十分适合 “状态管理类” 的任务。 典型的状态管理类的任务是:
erlang: 状态变化是万恶之源 https://zhuanlan.zhihu.com/p/27341488 了不起的 Erlang
redux: 前端状态管理器
ngrx: 前端状态管理器 https://zcating.github.io/2019/12/10/ckaum9y7o001zejl325a2852f/ 为什么要用 ngrx 它解决了什么问题
// 只有在这些任务面前,再开始聊函数式,才是合适的 因为函数式编程恰如其分解决了这类问题 (也就是 其它问题呢 想用函数式也没用) 。否则真的就是赶时髦的了


总之:
1 看中 明确的职责划分方法 ,的 结果是, 让复杂的事情变得可管理
2 对于某类任务,函数式编程可以降低复杂度 , 尤其是数据状态变化(数据状态跟踪)的复杂度
jchnxu
344 天前
@NessajCN 我也是这样的。。。继承是一种到处泄露的封装方式,尤其代码复杂了之后,心智负担很大
kapaseker
344 天前
@NessajCN 但是继承只是一个可选项,不是必选项
akorn
344 天前
@thtznet #58 谢谢啊
这个帖子点进来给我看懵了,以为我到外星球了。直到看到你这层,才知道自己还在地球。

看了半天,没搞明白大家在说什么?现代很多语言都是纯面向对象的啊,搞不明白怎么还出来个面向过程。举例说,python 。python 里所有的变量都是对象啊,就算是“a = 5”这种 int 类型,翻译成 java 或者 c++,就是 int a = new int ; a=5. 面向过程或者半面向对象的语言,int 这种基本数据类型不会使用内存指针,是直接开辟内存地址,后续是内存值操作。纯面向对象的,哪怕是基本数据类型,也是先创建指针,指针指向 int 内存,之后都是指针传递。只不过现在很多语言,编译器或者解释器把指针隐藏了,不开放给开发者使用。还有 map 的各种操作,map.set 、map.get ,这个“ . ”点出来的,不都是类方法吗?
看还有吐槽继承的。顺便吐槽一下 spring 的实现类,极大多少情况,一个接口对应一个实现类,的确违背接口设计的初衷了。接口类是为了多态服务的。比如 list 接口的各种实行,数组列表、链表、双端链表,它们都是 list 的实现类,list 在用的时候接可以灵活使用各种实现类的功能,扩展实现的时候直接加实现类就行,不用动 list 和所有已有的对 list 的使用。

就是说下我对这个话题的理解。如果我理解的和大家讨论的不是一回事。请无视。
InkStone
344 天前
现代语言比古代语言更 OOP

现代语言同时也比古代语言更 FP
woodfizky
344 天前
你可以用 FP ,你也可以用 OOP ,你还可以一起用,主要看用在什么场景。
用的好不好就开发者写的好不好,不存在说谁取代谁。
Felldeadbird
344 天前
不应该先拿一个语言为例嘛。FP 和 OOP 不是看语言选择风格的嘛?不可能说 java 去写 FP 呀,那失去了优化。
jonsmith
344 天前
技术思想在发展,oop 也在改良,比如组合远替代继承、函数一等公民、对接口的灵活运用。
TophTab
344 天前
函数类,对象类
SergeGao
344 天前
@locochen fp 也可以用闭包实现有状态,react 的 hooks 就是
uni
344 天前
哈哈哈前两周还在尝试在 python 里面搞 monad (是用来改进实际的业务代码哦),然后发现纯 monad 还是要配合语言的其它特性,比如说循环要用递归的方式来写,这样才能发挥 monad 的力量,但是比如说一个几千上万次的循环在 python 里面改成递归,在 python 里面也太扭曲了而且可能有性能问题,还是决定放弃了

但是 fp 是真的香!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1089413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX