RxJS简介

Posted honkerzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxJS简介相关的知识,希望对你有一定的参考价值。

函数式编程

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能够对花费的格?的数值变化作出“响应”。

Reactive Extension (响应式编程世界?知名度最?的框架)

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语?实现。

以上是关于RxJS简介的主要内容,如果未能解决你的问题,请参考以下文章

RxJS简介

rxjs Observable 两大类操作符简介

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

Rxjs知识整理

Rxjs知识整理

RxJS的基础