请教关于函数式编程的优势

2022-10-01 12:08:30 +08:00
 lerefe

最近在看函数式编程相关的内容,并且结合公司一些人用函数式变成的处理,产生一个疑问,从算法复杂度和速度来说,很多时候一个循环能做到的事情,会用 lambda 循环多次处理,这样做的根据是什么?

8257 次点击
所在节点    Java
65 条回复
golangLover
2022-10-01 12:12:19 +08:00
其实不要盲目使用 parallelStream, 很多数据量不大的情况下适得其反。
另外就是函数式的目的是为了写法,而不是为了速度
golangLover
2022-10-01 12:13:27 +08:00
现在的人这么卷吗?国庆还写代码
lerefe
2022-10-01 12:15:38 +08:00
@golangLover 哈哈哈,没买到票回不去,看点东西
TWorldIsNButThis
2022-10-01 12:17:04 +08:00
好处是第二种我看一遍代码的函数调用就知道在干嘛最后产生了什么结果

第一种不去跟着他的代码在脑子里模拟运行一下的话不知道最后得到了个什么东西,看了跟没看一样
lerefe
2022-10-01 12:18:46 +08:00
@TWorldIsNButThis 这个角度很有说服力
Nasei
2022-10-01 12:35:15 +08:00
性能方面,如果你的数据量十分巨大,后面那种可以很方便的改成集群式并发处理
TWorldIsNButThis
2022-10-01 12:41:23 +08:00
grouping 的第二个参数可以直接写对 group 内元素的处理,collectors.maxby(comparator.comparing(Book::getPrice)),
然后.values().stream().flatMap(Optional::stream)
代码可以更简短一些
rabbbit
2022-10-01 12:43:57 +08:00
个人理解就是更易读、易维护?缺点是某些场景下存在性能问题。
挺适合前端的(数据量小,需求、接口、数据格式总是变来变去)
lerefe
2022-10-01 12:44:24 +08:00
@TWorldIsNButThis 感谢指教
lerefe
2022-10-01 12:45:43 +08:00
@Nasei 你说的是 parallelStream 吗
L4Linux
2022-10-01 13:04:37 +08:00
而且第二种可重用性高一些,注释里也写了改一行就可以 XXX 。
Nasei
2022-10-01 13:05:22 +08:00
@lerefe 我说的是分布式计算的一种模式,你可以了解下 data parallel model 和 mapreduce
agagega
2022-10-01 13:07:40 +08:00
不可变能提高抽象层次(有助于并行或者向量化等优化),同时增强可读性
v2eb
2022-10-01 13:21:13 +08:00
yayiji
2022-10-01 13:25:30 +08:00
后者可读性强
结构固若金汤

可以参考马丁对编程范式的论述
结构化编程 我们限制了 goto 的使用
面向对象编程 我们限制了指针的能力
函数式编程 我们限制了可变变量的使用

The unavoidable price of reliability is simplicity.
lerefe
2022-10-01 13:26:15 +08:00
@v2eb 你也在看程序袁老爸的视频吗
zhouyg
2022-10-01 14:34:25 +08:00
函数式是声明式编程的范畴,而上面的代码是典型的指令式编程。所以这里的优势就是声明式编程相对于指令式编程的优势,也就是 readability, usability
likunyan
2022-10-01 14:54:29 +08:00
停止使用 var
zxCoder
2022-10-01 15:20:58 +08:00
@likunyan 请问为何
Huelse
2022-10-01 15:57:29 +08:00
很明显的区别之一就是第一种使用了变量,而第二种没有,或者说系统帮你维护了变量,
这样的写法用老外的话来说就是代码很健壮

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

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

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

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

© 2021 V2EX