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

例如,在命令式编程环境中, 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

时间: 2024-10-06 06:48:12

RxJS入门之函数响应式编程的相关文章

RxJava入门系列三,响应式编程

RxJava入门系列三,响应式编程 在RxJava入门系列一,我向你介绍了RxJava的基础架构.RxJava入门系列二,我向你展示了RxJava提供的多种牛逼操作符.但是你可能仍然没能劝服自己使用RxJava,这一篇博客里我将向你展示RxJava提供的其他优势,没准了解了这些优势,你就真的想去使用RxJava了. 异常处理 直到目前为止,我都没有去介绍onComplete()和onError()方法.这两个方法是用来停止Observable继续发出事件并告知观察者为什么停止(是正常的停止还是因

ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!

ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一! 简介 项目主页: ReactiveCocoa 实例下载: https://github.com/ios122/ios122 简评: 最受欢迎,最有价值的iOS响应式编程库,没有之一!iOS MVVM模式的完美搭档,更多关于MVVM与ReactiveCocoa的讨论,参考这篇文章: [长篇高能]ReactiveCocoa 和 MVVM 入门 注意: ReactiveCocoa 最新3.0版本,使用Swift重写,

什么是函数响应式编程(Java&amp;Android版本)

什么是函数响应式编程(Java&Android版本) 原文链接:http://www.bignerdranch.com/blog/what-is-functional-reactive-programming/ 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角.一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题. 我将尽量跳过对函数响应式编程学院式的解释(网络上已经有很多),并重点从实用的角度帮你理解什么是函数响应式编程,以及工作中

函数响应式编程(FRP)思想

序 ReactiveCocoa是IOS广为使用的技术框架,而ReactiveCocoa的核心思想就FRP.FRP不同于JAVA的object-oriented和AOP,FRP能让你的代码像数学一样简洁,业务像流水一样清晰流畅. 函数响应式编程 响应式编程思想为体,函数式编程思想为用. 响应式编程 例如,在命令式编程环境中, a:=b+c表示将表达式的结果赋给 a,而之后改变 b 或 c的值不会影响 a.但在响应式编程中,a的值会随着 b或 c的更新而更新. 在响应式编程当中,a:=b+c声明的是

函数响应式编程及ReactiveObjC学习笔记 (-)

最近无意间看到一个视频讲的ReactiveObjC, 觉得挺好用的 但听完后只是了解个大概. 在网上找了些文章, 有的写的比较易懂但看完还是没觉得自己能比较好的使用RAC, 有的甚至让我看不下去 这两天刚好公司项目交付闲下来, 想自己去啃下官方文档 ReactiveCocoa是一个基于函数响应式编程的OC框架. 那么什么是函数式响应式编程呢?概念我就不讲了 因为我讲的也不一定准确, 大家可以去baidu看看大神们的解释 下面我大概演示下响应式编程的样子 Masonry是比较常见的一个响应式框架,

函数响应式编程(FRP)思想-Callback风格

序 ReactiveCocoa是IOS广为使用的技术框架,而ReactiveCocoa的核心思想就FRP.FRP不同于JAVA的object-oriented和AOP,FRP能让你的代码像数学一样简洁,业务像流水一样清晰流畅. 函数响应式编程 响应式编程思想为体,函数式编程思想为用.  响应式编程 例如,在命令式编程环境中, a:=b+c表示将表达式的结果赋给 a,而之后改变 b 或 c的值不会影响 a.但在响应式编程中,a的值会随着 b或 c的更新而更新. 在响应式编程当中,a:=b+c声明的

函数响应式编程及ReactiveObjC学习笔记 (二)

之前我们初步认识了RAC的设计思路跟实现方式, 现在我们再来看看如果使用它以及它能帮我们做什么 One of the major advantages of RAC is that it provides a single, unified approach to dealing with asynchronous behaviors, including delegate methods, callback blocks, target-action mechanisms, notificat

响应式编程系列(一):什么是响应式编程?reactor入门

响应式编程 系列文章目录 (一)什么是响应式编程?reactor入门 (二)Flux入门学习:流的概念,特性和基本操作 (三)Flux深入学习:流的高级特性和进阶用法 (四)reactor-core响应式api如何测试和调试? (五)Spring reactive: Spring WebFlux的使用 (六)Spring reactive: webClient的使用 引言 Spring framework 5 的一大新特性:响应式编程(Reactive Programming).那么什么是响应式

RxJava响应式编程之初级了解

据说现在流行的开发模式是 Retrofit+RxJava+MVP+ButterKnife 如果想要简单学习ButterKnife.MVP模式,可以参考我以前的例子 使用butterknife注解框架 Android-MVP设计模式高级(三) 今天我就简单来学习下RxJava的相关知识 以前我也只是听说过RxJava,RxJava这个到底是什么东西呢? 呵呵,它其实是一个库,所以我们使用里面的方法,得需要下载库,所以我们需要在AS中进行配置 1.RxJava 地址以及添加 github地址: ht