001.开始进入反应式编程的世界

近年来,响应式编程范式越来越受欢迎,作为一个模型,旨在简化事件驱动应用程序的实现和异步代码的执行。响应式编程专注于更改的传播及其影响——简单地说,就是如何对更改做出反应更改并创建依赖于它们的数据流。

随着Facebook和Twitter等应用程序的兴起,在大洋的另一边发生的每一个变化(例如,状态更新)都是立即发生的在另一边观察,一连串的反应立即在里面发生应用程序。用一个简化的模型来表达这一点并不奇怪需要反应链。今天,现代应用程序受到变化的高度驱动发生在外界环境(如GPS定位,电池和电源)管理和社交网络消息)以及应用程序内部的更改(例如web调用响应、文件读写和计时器)。致所有人对于这些事件,应用程序会做出相应的反应——例如,通过更改显示视图或修改存储数据。

我们看到有必要用一个简化的模型来对许多类型的事件作出反应应用领域:机器人、移动应用、医疗保健等。以经典的命令式方式对事件做出反应会导致代码繁琐、难以理解、容易出错,因为负责协调事件和数据的可怜的程序员更改必须手动处理可以更改相同内容的代码孤岛数据。这些变化可能以不可预测的顺序发生,甚至可能同时发生。响应式编程提供了对事件和变化状态的抽象这样,当我们创建事件发生时运行的执行链时,我们就可以从管理这些值之间的依赖关系中解脱出来。

响应式扩展(Reactive Extensions, Rx)是一个提供响应式编程模型的库用于。net应用程序。Rx使事件处理代码更简单,表达能力更强使用声明式操作(LINQ风格)在单个序列上创建查询事件。Rx还提供了称为组合子(组合操作)的方法使您能够连接事件序列,以便处理事件发生的模式链接或它们之间的相关性。在写这篇文章的时候,超过600操作(带重载)在Rx库中。每一个都封装了循环事件处理代码,否则您必须自己编写。

这本书的目的是教你为什么应该接受响应式编程的思维方式,以及如何使用Rx轻松构建事件驱动的应用程序最重要的是,有趣。这本书将一步一步地教你建立在Rx的各个层上,从允许您创建响应式的构建块开始数据和事件流,通过Rx提供的丰富查询功能,以及Rx并发模型,允许您控制代码的异步性和
响应式处理程序的处理。但首先你得明白是什么响应式编程的含义,以及传统命令式编程与处理事件的响应式方式。

当应用程序发生变化时,你的代码需要对它们做出反应;这就是反应意味着。变化有多种形式。最简单的一个是变化的变量值,我们在日常编程中已经很习惯了。该变量保存一个值,该值可以在特定时间通过特定操作进行更改。为例如,在c#中你可以这样写:

int a = 2;
int b = 3;
int c = a + b;
Console.WriteLine("before: the value of c is {0}",c);
a=7;
b=2;
Console.WriteLine("after: the value of c is {0}",c);

输出:

before: the value of c is 5
after: the value of c is 5

在这个小程序中,两个输出都显示了c变量的相同值。在我们的命令式编程模型,c的值是5,除非您显式覆盖它,否则它将保持5。有时你想让c在a或b变化的时候更新。响应式编程引入了一种不同类型的随时间变化的变量:这个变量不是固定于其分配的值,而是随着时间的推移对发生的变化做出反应而变化。再看看我们的小程序;当它在响应式编程中运行时模型,输出为:
before: the value of c is 5
after: the value of c is 9

c的值神奇地改变了。这是由于发生在它的变化依赖关系。这个过程的工作原理就像一台机器,从两个平行的传送带输入,从两边的输入产生一种产品,如图1.1所示。

在这里插入图片描述
变量c始终依赖于a和b的值,当a=2,b=3,则c=5,当a=7,b=2,则c=9。

您可能会感到惊讶,但您可能已经使用过响应式应用程序年。正是这种反应性的概念造就了你最喜欢的电子表格应用程序如此简单和有趣的使用。当你在电子表格单元格中创建这种类型的方程时,每次更改输入方程的单元格中的值时,结果将在最终单元格会自动更改。

——未完待续

译者:重庆教主 20240513

网站:WPF中文网 wpfsoft.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/695888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32真的是很落后吗?

STM32 真的是很落后吗?这是一个值得探讨的问题。 STM32 是意法半导体(STMicroelectronics)推出的一款 32 位微控制器,它在嵌入式领域有着广泛的应用。虽然我对 Python 的了解有限,无法直接对 STM32 进行深入的比较&am…

IIS 搭建简单的http网站

一.打开IIS功能并安装 等待安装完成即可。 二. 配置网站和设置IP 三.打开目录浏览和设置WebDAV创作规则 四.添加个别文件的mime类型 五.防火墙添加入站规则

【多模态】30、GPT4V_OCR | GPT4V 在 OCR 数据集上效果测评

文章目录 一、背景二、测评2.1 场景文本识别2.2 手写文本识别2.3 手写数学公式识别2.4 图表结构识别(不考虑单元格中的文本内容)2.5 从内容丰富的文档中抽取信息 三、讨论 论文:EXPLORING OCR CAPABILITIES OF GPT-4V(ISION) : A QUANTITATIV…

Linux内核下RAS(Reliability, Availability and Serviceability)功能分析记录

1 简介 Reliability, Availability and Serviceability (RAS) — The Linux Kernel documentation 在服务器 和 卫星等领域,对设备的稳定性要求很高,需要及时的发现并处理软/硬件上的错误。RAS功能可以用来及时的发现硬件上的错误。 RAS功能需要硬件的…

vue3中使用cherry-markdown

附cherry-markdown官网及api使用示例 官网:https://github.com/Tencent/cherry-markdown/blob/main/README.CN.md api:Cherry Markdown API 考虑到复用性,我在插件的基础上做了二次封装,步骤如下: 1.下载 (一定要指定版本0.8.22,否则会报错: [vitel Internal server e…

省公派访学|社科老师赴世界名校牛津大学开展研究

F老师已获某省公派出国访学半年的资助,希望落实的学校尽量知名。但因为F老师只是硕士毕业而无博士学位,专业方向又是社科类,所以申请到世界知名高校有一定难度。经过努力,最终我们获得了世界顶尖高校-英国牛津大学的访问学者邀请函…

558、Vue 3 学习笔记 -【常用Composition API(七)】 2024.05.13

目录 一、Composition API的优势1. Options API存在的问题2. Composition API的优势 二、 新的组件1. Fragment2. Teleport3. Suspense 三、其他1. 全局API的转移2. 其他改变 四、参考链接 一、Composition API的优势 1. Options API存在的问题 使用传统OptionsAPI中&#xf…

全球静态IP购买:全面指南与实用建议

在数字化时代,互联网连接已成为企业和个人日常运营和生活的核心。而全球静态IP地址,作为网络身份的独特标识,其重要性不言而喻。静态IP地址提供了稳定的网络连接和更高级的网络管理功能,使得远程访问、服务器托管、网络安全等应用…

如何在群晖NAS中开启FTP并实现使用公网地址远程访问传输文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

2024年淘宝618跨店满减是满300减多少?淘宝618超级红包领取口令是什么?

2024年淘宝618跨店满减是满300减多少? 随着2024年618年中大促的临近,各大电商平台纷纷亮出了各自的优惠活动。其中,淘宝和天猫的跨店满减活动总是备受关注。今年,淘宝618更是取消预售环节,推出了新的玩法——淘宝、天…

PRTR5V0U4D ESD抑制器 6V TVS二极管 参数 应用案例

PRTR5V0U4D 是一款特定应用型 ESD(静电放电)和 ESD/EMI(电磁干扰)解决方案产品。它是一款超低电容四路轨到轨 ESD 保护器件,适用于保护高速数据线和高频信号线免受 ESD 和其他瞬态电压的影响。该器件采用了小型 SOT457…

只需使用浏览器,就能从地球上的任何地方远程访问你的树莓派?

我们很高兴地宣布 Raspberry Pi Connect 测试版发布:这是一种安全、易用的方法,只需使用网络浏览器,就能从地球上的任何地方远程访问您的 Raspberry Pi。 Raspberry Pi Connect 测试版:https://www.raspberrypi.com/software/con…