AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

关于响应式编程你可能错过的信息

  • 2014-07-04
  • 本文字数:1706 字

    阅读完需:约 6 分钟

在函数式编程重新焕发生命力的当下,结合了函数式编程思想的函数式响应型编程(Functional Reactive Programming,简称 FRP)在 GUI 编程等领域又吹来一阵清风。虽然 FRP 的理论与实践可以追溯到上个世纪九十年代,但它蕴含的诸多概念对于大多数程序员而言,还是全新的知识。维基百科对FRP 的定义为:

函数式响应型编程是使用函数式编程构建块针对响应式编程的一种编程范式。它主要用于GUI 编程、机器人技术、音乐流处理等领域,通过显式地对时间进行建模来简化问题域。

这样的定义未免太过于宽泛了。 Stackoverflow 对此的回答倒是详尽而细致地阐述了 FRP 的今世前身,可惜又失之艰深,若用于学术讨论,确乎是最佳选择。例如,我们可以阅读发表于 1997 年由 Conal Elliott 与 Paul Hudak 撰写的论文《 Functional Reactive Animation 》,以及同样由 Conal Elliot 于 1998 年发表的论文《 Composing Reactive Animations 》。

FRP 最早发源于 Haskell 社区。Haskell 官方网站专门介绍了FRP 的知识。这篇介绍还提供了诸多讲解FRP 的资源,同时提到了一些实现了FRP 的库,例如 Sodium Grapefruit Reactive Yampa 等。当然,这种来源于函数式编程的编程范式,自然也可以运用于除 Haskell 之外的其他具备函数式编程特性的语言,例如 JavaScript,Scala,F#等。因此,若要理解什么是 FRP,最佳方式莫过于通过一个完整的案例来理解。

近日,Andre Staltz 在 Github 上发布了一篇长文《关于响应式编程你可能错过的信息》,通过运用JavaScript 和RxJS,以FRP 的编程范式实现了如Twitter 中推荐朋友的功能。这篇文章围绕着FRP 的一个核心概念“FRP 是针对异步数据流进行编程”进行讲解,并抓住了FRP 的本质,即将任何事物都视为一个流对象,包括变量、用户输入、属性、缓存、数据结构等。这种针对流的处理方式有些像管道- 过滤器模式,而它又与函数式语言的组合子Combinator 是相呼应的。例如我们可以对流进行map、filter 等组合操作。而FRP 对事件的订阅,则符合观察者模式的设计思想。文中给出了一个FRP 例子,它用JavaScript 处理了“双击”的事件流:

复制代码
// The 4 lines of code that make the multi-click logic
var multiClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x >= 2; });
// Same as above, but detects single clicks
var singleClickStream = clickStream
.buffer(function() { return clickStream.throttle(250); })
.map(function(list) { return list.length; })
.filter(function(x) { return x === 1; });
// Listen to both streams and render the text label accordingly
singleClickStream.subscribe(function (event) {
document.querySelector('h2').textContent = 'click';
});
multiClickStream.subscribe(function (numclicks) {
document.querySelector('h2').textContent = ''+numclicks+'x click';
});
Rx.Observable.merge(singleClickStream, multiClickStream)
.throttle(1000)
.subscribe(function (suggestion) {
document.querySelector('h2').textContent = '';
});

文中对例子的阐述,一个很有启发的内容是如何采用 FRP 的思想对需求进行分析。例如针对需求“通过 API 加载账号数据,并显示 3 个推荐”,即可以分解为:

  • doing a request
  • getting a response
  • rendering the response

这种将一切视为“流”,然后针对各个阶段进行数据转换的方式,非常符合函数式思想,也极好地阐述了 FRP 的基本要义。

若要了解 FRP 的详细知识,可以深入阅读 Andre Staltz 的这篇文章。此外,InfoQ 中国在去年也曾发表过由网易的邓际锋撰写的关于FRP 的文章《函数式反应型编程(FRP) —— 实时互动应用开发的新思路》。这篇文章很好地通过实现一个类似Flicker 的小应用阐述了FRP 的概念。


感谢杨赛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-07-04 00:403800
用户头像

发布了 109 篇内容, 共 44.0 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

集成Sermant,ServiceStage带你实现应用上下线平滑过渡

华为云开发者联盟

#人工智能

Emby for Mac:一款强大的多媒体影音库管理工具

Rose

macOS Big Sur 11(苹果电脑mac11系统安装包)v11.7.10正式版

Rose

OpenAI以1500亿美元公司估值向投资者筹集65亿美元!安卓版谷歌Gemini Live免费上线|AI日报

可信AI进展

一文轻松掌握Kotlin接口与类

Silently9527

Java kotlin

苹果电脑免费好用的鼠标增强工具:Mos for Mac

Rose

苹果虚拟机软件Parallels Desktop与VMware Fusion有何不同?

Rose

聚道云软件连接器9月新增应用合集(1)

聚道云软件连接器

功能更新

超实用的办公模板合集(office模板、商业模板、思维导图模板)

Rose

首批通过!华为FusionCube A3000训推超融合一体机通过中国信通院可信AI大模型一体机产品全能力评估

中国信通院AI Infra工作组

VMware vSphere 8.0 Update 3b 发布下载,新增功能概览

sysin

vSphere vmware vcenter esxi

Paper Digest|OpenSPG 超大规模知识仓储 KGFabric 论文解读

可信AI进展

OpenSPG

Cocktail for Mac(系统清理)(15以上系统适用)v18.1 注册激活版

Rose

安装AutoCAD最新版,提示安装错误112解决方法

Rose

VMware vCenter Server 8.0U3b 发布下载,新增功能概览

sysin

vSphere vcenter esxi

免弹窗、预授权,默认界面扫码能力打造系统级扫码体验

HarmonyOS SDK

HarmonyOS

首批通过!中国移动(浙江)创新研究院九天信创一体机顺利通过中国信通院可信AI大模型一体机评估

中国信通院AI Infra工作组

VMware ESXi 8.0U3b 发布下载,新增功能概览

sysin

vSphere vmware esxi

从YouTube到B站,Downie 4一网打尽,视频下载无界限!

Rose

混沌工程入门指南

FunTester

橙篇与中传经管学院达成战略合作,联合推出经济学领域首个高校智能体「中传经小济」

极客天地

聚焦大模型基础设施发展,AI Infra组会在宁召开

中国信通院AI Infra工作组

首批通过!百度千帆大模型一体机顺利通过中国信通院可信AI大模型一体机全能力评估

中国信通院AI Infra工作组

开源即时通讯IM框架MobileIMSDK的H5端技术概览

JackJiang

即时通讯;IM;网络编程

火热报名中 | 2024开放原子开源生态大会:聚焦产业发展,共谋生态繁荣之路

极客天地

6月25日相聚金陵,AIIA将召开多场线下组会

中国信通院AI Infra工作组

边缘人工智能平台标准即将形成征求意见稿

中国信通院AI Infra工作组

如何将扫码提交的数据直接推送到企业微信、钉钉、飞书群聊?详细教程

草料二维码

草料二维码

关于响应式编程你可能错过的信息_语言 & 开发_张逸_InfoQ精选文章