rxjs入门之函数响应式编程(代码片段)

honkerzh honkerzh     2022-12-02     761

关键词:

一.函数式编程

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 属于“函数响应式编程”。

函数响应式编程的优势

  • 数据流抽象了很多现实问题。
  • 擅长处理异步操作。
  • 把复杂问题分解成简单问题的组合。

编程范式——函数式编程入门(代码片段)

该系列会有3篇文章,分别介绍什么是函数式编程、剖析函数式编程库、以及函数式编程在React中的应用,欢迎关注我的blog命令式编程和声明式编程拿泡茶这个事例进行区分命令式编程和声明式编程命令式编程1.烧开水(为第一人... 查看详情

rust编程语言入门之函数式语言特性:-迭代器和闭包(代码片段)

函数式语言特性:-迭代器和闭包本章内容闭包(closures)迭代器(iterators)优化改善12章的实例项目讨论闭包和迭代器的运行时性能一、闭包(1)-使用闭包创建抽象行为什么是闭包(closure)闭包:可以捕获其所在环境的匿名函数... 查看详情

函数式编程简介-附入门方法(代码片段)

WHAT?什么是函数式编程?函数式编程是一种编程范式。编程范式又是什么?编程范式是一种解决问题的思路。我们熟悉的命令式编程把程序看作一系列改变状态的指令;而函数式编程把程序看作一系列数学函数映射的组合。编程... 查看详情

rxjs入门2之rxjs的安装(代码片段)

RxJSV6.0+安装RxJS的import路径有以下5种:1.创建Observable的方法、types、schedulers和一些工具方法importObservable,Subject,asapScheduler,pipe,of,from,interval,merge,fromEvent,SubscriptionLike,PartialObserverfrom'rxjs' 查看详情

springboot入门基础(代码片段)

一、自动配置特性响应式编程yueque.com/atguigu/springboot文档maven3.3以上mvn-vspring可以做什么1、微服务microservices2、响应式编程reactive异步数据流异步非阻塞少量资源大吞吐量3、cloud4、webappsweb应用5、serveless无服务faas函数式服务6、event... 查看详情

python入门到精通python函数式编程与应用详解(代码片段)

🚀作者:“大数据小禅”🚀粉丝福利:加入小禅的大数据社群🚀欢迎小伙伴们点赞👍、收藏⭐、留言💬目录python函数式编程lambda表达式的用法及其使用场景什么是匿名函数?ambda表达式的基本格... 查看详情

ios基于kvo实现响应式编程之完结篇(代码片段)

  最近一直在探索基于KVO实现响应式编程,之前也写了两篇相关的文章。《OC实现KVO监听block方式响应事件》,《iOS通过KVO实现响应式编程(一)》最近方案基本完善。这边完整的和大家梳理一下。需求梳理一、监听... 查看详情

前端开发函数式编程入门(代码片段)

前端开发函数式编程入门函数式编程是一门古老的技术,从上个世纪60年代Lisp语言诞生开始,各种方言层出不穷。各种方言带来欣欣向荣的生态的同时,也给兼容性带来很大麻烦。于是更种标准化工作也在不断根据现... 查看详情

响应式spring的道法术器(springwebflux快速上手+全面介绍)(代码片段)

1.SpringWebFlux2小时快速入门Spring5之使用SpringWebFlux开发响应式应用。lambda与函数式(15min)Reactor3响应式编程库(60min)SpringWebflux和SpringDataReactive开发响应式应用(45min)通过以上内容相信可以对Spring5.0推出的响应式开发有了初步的... 查看详情

lambda与函数式——响应式spring的道法术器(代码片段)

...应式编程的“手感”吧。这一节,我们先了解一下lambda与函数式(已经了解的朋友可以直接跳到1.3.2),熟悉一下如何使用Reactor进行响应式编程,然后使用Spr 查看详情

f#语言入门之什么是f#语言(代码片段)

F#是一种函数式编程语言,可以轻松编写正确且可维护的代码。F#编程主要涉及定义类型推断和自动泛化的类型和函数。这使您可以将焦点保留在问题域上并操纵其数据,而不是编程的细节。openSystem//GetsaccesstofunctionalityinSystemn... 查看详情

kotlinflow响应式编程,基础知识入门(代码片段)

本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索郭霖即可关注,每个工作日都有文章更新。Kotlin在推出多年之后已经变得非常普及了。相信现在至少有80%的Android项目已经在使用Kotlin开发,或... 查看详情

python入门到精通python函数式编程与应用详解(代码片段)

🚀作者:“大数据小禅”🚀粉丝福利:加入小禅的大数据社群🚀欢迎小伙伴们点赞👍、收藏⭐、留言💬目录python函数式编程lambda表达式的用法及其使用场景什么是匿名函数?ambda表达式的基本格... 查看详情

rxjs简单入门

rxjs全名ReactiveExtensionsforJavaScript,Javascript的响应式扩展,响应式的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(ObservableSequence),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好... 查看详情

kotlinflow响应式编程,操作符函数进阶(代码片段)

...了会开启一个新的系列,讲一讲KotlinFlow响应式编程从入门到进阶的内容。总共计划是用三篇文章讲完,而本篇则是这个系列的第二篇文章。如果你还没有看过前面的基础知识入门的话,可以先去参考这里KotlinFlow响应... 查看详情

kotlinflow响应式编程,操作符函数进阶(代码片段)

...了会开启一个新的系列,讲一讲KotlinFlow响应式编程从入门到进阶的内容。总共计划是用三篇文章讲完,而本篇则是这个系列的第二篇文章。如果你还没有看过前面的基础知识入门的话,可以先去参考这里KotlinFlow响应... 查看详情

函数式编程之-f#类型系统(代码片段)

在深入到函数式编程思想之前,了解函数式独有的类型是非常有必要的。函数式类型跟OO语言中的数据结构截然不同,这也导致使用函数式编程语言来解决问题的思路跟OO的思路有明显的区别。什么是类型?类型在编程语言中有... 查看详情

什么是响应式编程——响应式spring的道法术器(代码片段)

本系列文章索引:《响应式Spring的道法术器》。1响应式编程之道1.1什么是响应式编程?在开始讨论响应式编程(ReactiveProgramming)之前,先来看一个我们经常使用的一款堪称“响应式典范”的强大的生产力工具——电子表格。举... 查看详情