函数式编程

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简介的更多相关文章

  1. RxJS 简介:可观察对象、观察者与操作符

    RxJS 简介:可观察对象.观察者与操作符 对于响应式编程来说,RxJS 是一个不可思议的工具.今天我们将深入探讨什么是 Observable(可观察对象)和 observer(观察者),然后了解如何 ...

  2. RxJS的基础

    RxJS是一个强大的Reactive编程库,提供了强大的数据流组合与控制能力,但是其学习门槛一直很高,本次分享期望从一些特别的角度解读它在业务中的使用,而不是从API角度去讲解. RxJS简介 通常, ...

  3. RxJS 入门指引和初步应用

    作者:徐飞链接:https://zhuanlan.zhihu.com/p/25383159来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. RxJS是一个强大的React ...

  4. [译]RxJS 5.X基础篇

    欢迎指错与讨论 : ) 当前RxJS版本:5.0.0-beta.10.更详细的内容尽在RxJS官网http://reactivex.io/rxjs/manual/overview.html.文章比较长 ...

  5. 一起来看 rxjs

    更新日志 2018-05-26 校正 2016-12-03 第一版翻译 过去你错过的 Reactive Programming 的简介 你好奇于这名为Reactive Programming(反应式编 ...

  6. .NET Core/.NET之Stream简介 Rx.NET 简介

    .NET Core/.NET之Stream简介   之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core ...

  7. 响应式js库——rxjs

    原文地址:https://rxjs.dev/guide/overview 简介 RxJS 是组合异步以及基于事件的使用可观察者序列的程序类库.它提供一个核心类型,Observable,附属类型(Obs ...

  8. 【转】Rxjs知识整理

    原文:https://www.jianshu.com/p/16be96d69143 ---------------------------------------------------------- ...

  9. RxJS + Redux + React = Amazing!(译一)

    今天,我将Youtube上的<RxJS + Redux + React = Amazing!>翻译(+机译)了下来,以供国内的同学学习,英文听力好的同学可以直接看原版视频: https:/ ...

随机推荐

  1. 如何把遗留的Java应用托管在Service Fabric中

    一.概述 众所周知,微服务化尤其对遗留系统进行微服务化一般采用"Lift and Shift"的模式进行. Service Fabric作为一个微服务托管平台,不仅仅可以在上面跑. ...

  2. VS 中 无法嵌入互操作类型“……”,请改用适用的接口的解决方法

    在引用COM组件的时候,出现了无法嵌入互操作类型"--",请改用适用的接口的错误提示. 选中项目中引入的dll,鼠标右键,选择属性,把"嵌入互操作类型"设置为F ...

  3. windows配置ssh免密登录linux

    客户端(windows)要做的事情 默认机器上已安装git,若没有,请先安装git 查看本地是否有ssh公钥文件夹,若没有,则创建文件夹 mkdir ~/.ssh //创建文件夹 生成公钥 邮箱最好为 ...

  4. Codeforces 279D The Minimum Number of Variables 状压dp

    The Minimum Number of Variables 我们定义dp[ i ][ mask ]表示是否存在 处理完前 i 个a, b中存者 a存在的状态是mask 的情况. 然后用sosdp处 ...

  5. js数组删除元素、json删除元素

    //数组var b=[1,2,3,4]; b.splice(b.indexOf(2,1)) //1,3,4 //json var arrayId=[{"id":233," ...

  6. windows与linux多线程对比

      一.创建线程 1>windows HANDLE aThread[MAX_THREAD]; 函数原型: HANDLE WINAPI CreateThread( _In_opt_ LPSECUR ...

  7. [转]玩转图片Base64编码

    转自:[前端攻略]:玩转图片Base64编码 图片处理在前端工作中可谓占据了很重要的一壁江山.而图片的 base64 编码可能相对一些人而言比较陌生,本文不是从纯技术的角度去讨论图片的 base64 ...

  8. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  9. android BLE Peripheral 模拟 ibeacon 发出ble 广播

    Android对外模模式(peripheral)的支持: 从Android 5.0+开始才支持. api level >= 21 所以5.0 之前设备,是不能向外发送广播的. Android中心 ...

  10. Python(day1)

    一.Python的属于解释型语言. 编译型:一次性,将全部的程序编译成二进制文件,然后再运行. 优点:运行速度快. 缺点:开发效率低,不能跨平台. 解释型:当你的程序运行时,一行一行的解释,并运行. ...