一.函数式编程
1.声明式(Declarativ)
和声明式相对应的编程?式叫做命令式编程(ImperativeProgramming),命令式编程也是最常见的?种编程?式。
//命令式编程:
function double(arr) {
const results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] * 2)
}
return results
}
function addOne(arr){
const results = []
for (let i = 0; i < arr.length; i++){
results.push(arr[i] +1)
}
return results
}
//声明式:
const double = arr => arr.map(item => item * 2);
const addOne = arr => arr.map(item => item + 1);
2.纯函数(Pure Function)
- 函数的执?过程完全由输?参数决定,不会受除参数之外的任何数据影响。
- 函数不会修改任何外部状态,?如修改全局变量或传?的参数对象。
相反的不纯函数:
改变全局变量的值。
- 改变输?参数引?的对象,就像上?不是纯函数的arrayPush实现。
- 读取?户输?,?如调?了alert或者confirm函数。
- 抛出?个异常。
- ?络输?/输出操作,?如通过AJAX调??个服务器的API。
- 操作浏览器的DOM。
满?纯函数的特性也叫做引?透明度(Referential Transparency),这是更加正式的说法。怎么称呼不重要,重要的是开发者要理解,所谓的纯函数,做的事情就是输?参数到返回结果的?个映射,不要产?副作?(Side Effect)。
3.数据不可变性(Immutability)
数据不可变(Immutable)是函数式编程?常重要的?个概念,程序要好发挥作?当然是要产?变化的数据,但是并不意味着必须要去修改现有数据,替换?法是通过产?新的数据,来实现这种“变化”,也就是说,当我们需要数据状态发?改变时,保持原有数据不变,产??个新的数据来体现这种变化。不可改变的数据就是Immutable数据,它?旦产?,我们就可以肯定它的值永远不会变,这?常有利于代码的理解。
注意:JavaScript中的const关键字虽然有常数(constant)的意思,但其实只是规定?个变量引?的对象不能改变,却没有规定这个const变量引?的对象??不能发?改变,所以,这个“常量”依然是变量。
问题:javascript算不算函数式编程语言?
从语言的角度上讲,javascript并是纯粹的函数式编程语言,JavaScript中的函数有第?公民的?份,因为函数本?就是?个对象,可以被赋值给?个变量,可以作为参数传递,由此可以很?便地应?函数式编程的许多思想。我们把函数式编程看作?种编程思想,即使语?本?不?持?些特性,我们依然可以应?这样的编程思想,?于提?代码的质量。所以,JavaScript并不是纯粹的函数式编程语?,但是,通过应??些编程规范,再借助?点?具的帮助,我们完全可以?JavaScript写出函数式的代码,RxJS就是辅助我们写出函数式代码的?种。
二.响应式编程(Reactive Programming)
就像excell,试着?Excel把多个星期的花费综合加起来放在另?个叫c9格??,c9能够对花费的格?的数值变化作出“响应”。
例如,在命令式编程环境中, a:=b+c表示将表达式的结果赋给 a,而之后改变 b 或 c的值不会影响 a。但在响应式编程中,a的值会随着 b或 c的更新而更新。
Reactive Extension 简称 Rx(响应式编程世界?知名度最?的框架)
An API for asynchronous programming with observable streams 。 Rx是?套通过可监听流来做异步编程的API。
Rx其实是?个?家族,在这个?家族中,还有?Java实现的RxJava,?C++实现的RxCpp,?Ruby实现的Rx.rb,?Python实现的RxPy,当然,还有这个?家族中最年长的Rx.NET。RxJS,也就是Rx的JavaScript语?实现。
Rx(包括RxJS)诞?的主要?的虽然是解决异步处理的问题,但并不表?Rx不适合同步的数据处理,实际上,使?RxJS之后?部分代码不需要关???是被同步执?还是异步执?,所以处理起来会更加简单。
RxJS 属于“函数响应式编程”。
函数响应式编程的优势
- 数据流抽象了很多现实问题。
- 擅长处理异步操作。
- 把复杂问题分解成简单问题的组合。
原文地址:https://www.cnblogs.com/honkerzh/p/10794459.html