您好,欢迎来到站长目录(28sn.com)!


一文看懂函数式编程!

来源:网络整理 浏览:178次 时间:2022-05-27

第一时间获取技术干货和业界资讯!

☞ 免费CSDN资料帮下服务 | 免费加群 ☜

我在 WebFlux 教程中已经阐明了一种观点,函数式编程(Functional programming)将成为未来编程的一种趋势。我们也可以从 Java 8 等新版本中看到这种趋势。所以关于函数式编程的原理,优缺点?什么是函数式编程?等问题,我做一个总结,希望能够方便到大家的学习和理解!

什么是函数式编程?
函数式编程的第一个特点就是可以把函数作为参数传递给另一个函数,也就是所谓的高阶函数。例如,对数组进行排序,可以传入一个排序函数作为参数:

函数式编程的第二个特点就是可以返回一个函数,这样就可以实现闭包或者惰性计算。

函数式编程的好处
那么根据简化了的函数式编程的特点,函数式编程有什么好处呢?

从代码的可维护性上讲,函数式编程最大的好处是引用透明,即函数运行的结果只依赖于输入的参数,而不依赖于外部状态,因此,我们常常说函数式编程没有副作用。

没有副作用有个巨大的好处,就是函数内部无状态,即输入确定,输出就是确定的,容易测试和维护。

下面我们通过一个例子来看它的好处!

比如一个财务软件,需要一个函数专门计算个人所得税,输入是一个 IncomeRecord,输出是个税金额:


然后假设 IncomeRecord 长这样:

然后,我们不考虑其它的社保、公积金等乱七八糟的东西内容。我们只简化为,扣减一个免征额后多月的按 20% 的税收计算。

上面这个程序在 2018 年 10 月 1 号前是没问题的,问题是 2018 年 10 月 1 号后起征点调整到了 5000,那 2018 年 9 月和 2018 年 10 月,计算结果应该不一样。上面的税收方式就需要调整?怎么调整呢?

这样改代码,看起来没错,但是在实际运行中,可能会出问题。

比如,我们 10 月份,实际上发的是 9 月份的工资吧。这个系统,在 9 月 30 号跑,和 10 月 1 号跑,结果不一样。比如,我们在 10 月 2 号这天发工资。但是这次发工资我们是按照上月的考勤来统计个税的,然后会计要在 10 月 1 号做 9 月份的工资条,和 9 月 30 号做工资条,结果并不一致。难道要求会计必须把电脑的时间先调到 9 月份?

所以,这个问题,我们用函数式编程思维就很好解决了。calculateIncomeTax() 不再是一个纯函数,它与当前时间相关了。现在我们把它变成一个纯函数。

calculateIncomeTax 函数也在调整一下:

虽然这个问题,不用函数式编程也能解决。但是拥有函数式编程思维比解决问题本身更重要。

总的来说,函数式编程强调将计算过程分解成可复用的函数,典型例子就是 map 方法和 reduce 方法组合而成 MapReduce 算法。更多函数式编程知识,请参考我的 WebFlux 教程!

推荐站点

  • 我爱发烧音乐我爱发烧音乐

    我爱发烧音乐囊括了从流行音乐到古典音乐多个类型的音乐作品,专栏推荐最新的音乐,提供音乐排名榜单!可供免费线上收听音乐,歌曲流畅,音效极佳! 网站提供的钢琴以及二胡专栏,可供收听者,陶冶情操,改善心情,是难得的轻音乐典藏!

    www.520fs.com
  • 世纪音乐网世纪音乐网

    世纪音乐网是专业的在线音乐试听MP3下载网站。歌曲总计30余万首,收录了网上最新歌曲和流行音乐,DJ舞曲,非主流音乐,经典老歌,劲舞团歌曲,搞笑歌曲,儿童歌曲,英文歌曲等。是您上网听歌的最佳网站。

    www.ssjj.com
  • 杭州网杭州网

      杭州网是杭州地区唯一的新闻门户网站,由中共杭州市委宣传部、杭州日报报业集团和杭州广播电视集团共同组建的杭州网络传媒有限公司运营。

    www.hangzhou.com.cn
  • 深圳在线深圳在线

      深圳在线 www.szol.net是深圳本地最大、最早的地方生活资讯网站之一,网站名“深圳在线www.szol.net”由南方报业传媒集团编辑委员会总编辑、南方日报社总编辑、南方都市报总编辑、南方书画院名誉院长王春芙亲笔题名,深圳在线www.szol.net团队与深圳热线www.szonline.net、奥一网www.oeeee.com都源于全国最早成立于1996年的知名网络公司——深圳万用网。

    www.szol.net
  • 今题网今题网

     今题网- 中国领先的社区服务网,提供社区服务, 在线交友和商家推广服务,于2004年创建上线,公司现有员工超过百名。今题网自成立以来,凭借其独特的定位和丰富的社区交友功能, 凭借其团队超强的搜索引擎优化技术吸引超过千万的用户成为今题网的注册会员。

    www.jinti.com

鄂公网安备 42062502000001号