编程范式2-函数式编程

编程工作更多的是解决业务上的问题,而不是计算机的问题,我们需要更为贴近业务、更为抽象的语言,如典型的面向对象语言 C++ 和 Java 等。已经做到了泛型编程

那么如何做更为抽象的泛型呢?答案就是函数式编程(Functional Programming)。

函数式编程

泛型是为了能够抽象,函数式编程 更加抽象

函数式编程,它的理念就来自于数学中的代数。

函数式编程来说,它只关心定义输入数据和输出数据相关的关系,数学表达式里面其实是在做一种映射(mapping),输入的数据和输出的数据关系是什么样的,是用函数来定义的。

特征

  1. stateless(无状态):函数不维护任何状态。函数式编程的核心精神是 stateless,简而言之就是它不能存在状态,你给我数据我处理完扔出来。里面的数据是不变的。
  2. immutable(不可变):输入数据是不能动的,动了输入数据就有危险,所以要返回新的数据集。

优势

  1. 没有状态 就没有伤害。
  2. 并行执行无伤害。
  3. Copy-Paste 重构代码无伤害。
  4. 函数的执行没有顺序上的问题。

劣势

  1. 数据复制比较严重。
  2. 纯函数需要花点精力 ,函数式编程的抽象度更大,在实现方式上,有函数套函数、函数返回函数、函数里定义函数……把人搞得很糊涂

实现方案

把函数当成变量来用,关注描述问题而不是怎么实现,这样可以让代码更易读。
因为函数返回里面的这个函数,所以函数关注的是表达式,关注的是描述这个问题,而不是怎么实现这个事情。
代码变成了在描述你要干什么,而不是怎么干。

函数式语言有三套件,MapReduceFilter

  • 面包和蔬菜 map 到切碎的操作上,再把结果给 reduce 成汉堡。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值