没有合适的资源?快使用搜索试试~ 我知道了~
mayijun000#summary#什么是函数式编程1
需积分: 0 0 下载量 81 浏览量
2022-07-25
14:35:38
上传
评论
收藏 8KB MD 举报
温馨提示
一句话来做总结:函数式编程关心数据的映射,命令式编程关心解决问题的步骤举个例子,如果编写一个函数来实现把数组的每个数字都变成它本身的2倍,命令式编程的思路应该是
资源推荐
资源详情
资源评论
# **什么是函数式编程**
我们常见的编程范式有两种:命令式和声明式,比如我们熟悉的面向对象思想就属于命令式,而函数式编程属于声明式。而且顺带说一句,函数式编程里面提到的“函数”不是我们理解的编程中的“function”概念,而是数学中的函数,即变量之间的映射。
那么,函数式编程和我们熟知的声明式编程区别是什么?一句话来做总结:**函数式编程关心数据的映射,命令式编程关心解决问题的步骤**
举个例子,如果编写一个函数来实现把数组的每个数字都变成它本身的2倍,命令式编程的思路应该是:遍历一次数组,并且把每个数字乘以2,代码如下:
```js
const solution = (arr) => {
const newArr = [];
for(let i = 0;i < arr.length;i++) {
newArr.push(arr[i]*2);
}
return newArr;
}
```
但是如果从函数式编程的思维去思考,无非就是数组A的每个元素是数组B每个元素的两倍,存在一个映射:[a, b, c, d, ...] => [2a, 2b, 2c, 2d, ...],代码如下:
```js
const solution = (arr) => {
return arr.map(item => {
return item*2;
})
}
```
从上面这两个简单的例子可以看出来,函数式编程与命令式编程的思路最大的不同在于:函数式更关心数据的映射。
在前端开发领域中,有很多函数式的使用,比如React框架,它本身的设计理念就是View = Fn(Data),而且还有函数式组件以及高阶组件等等,无一不都透露着对函数式编程的实践。
## **纯函数**
纯函数是函数式编程中一个很重要的概念,它的定义是:纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,且不依赖外部环境。
比如说对于数组的方法slice和splice来说(例子来自于函数式编程指北):
```js
var xs = [1,2,3,4,5];
// 纯的
xs.slice(0,3);
//=> [1,2,3]
xs.slice(0,3);
//=> [1,2,3]
xs.slice(0,3);
//=> [1,2,3]
// 不纯的
xs.splice(0,3);
//=> [1,2,3]
xs.splice(0,3);
//=> [4,5]
xs.splice(0,3);
//=> []
```
可以从例子里看出,对于slice来说,它对于相同的输入总能返回相同的输出;而splice直接在原数组上作出改变,产生了可观察到的副作用,即改变了数组�
点击阅读更多
资源评论
lirumei
- 粉丝: 73
- 资源: 301
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- lagou-bigdata-学习-java继承和多态之接口
- java-learning-练习-java继承和多态之综合练习
- lagou-bigdata-学习-java继承和多态之接口
- 基于OFDM系统的OMP信道估计算法matlab仿真,对比LS信道估计,包括程序,中文注释,仿真操作步骤视频
- GAUSS是一款用于数据分析、数学计算和统计分析的软件环境,它基于强大的矩阵编程语言
- 初心最新公益脚本.py
- 基于Qt6.8+MySQL8.0的电子元器件仓库管理系统
- 数据库开发实战基础教程:从零到一构建你的数据库应用
- 食堂打饭系统Python.py
- 数字IC经典电路(5)-glitch-free-clock-switch的实现(无毛刺时钟切换电路简介及Verilog实现)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功