本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
从JS中学习函数式编程的五项支柱
xiaomei1994 · 267浏览 · 发布于2021-03-24 +关注

一、什么是函数式编程

从FP函数式编程的眼中看来,世界的万事万物就是处理数据流:

input --> process -- output

FP函数式编程是一种思维方式:

帮你精通JS: 从JS中学习函数式编程的五项支柱


比如非函数式,会这样写程序:

> var name = "gaowei";
> var greeting = "Hello,I'm ";;
> console.log(greeting + name)
Hello,I'm gaowei

而函数范式编程则会这样写程序:

> function greet(name) {
... return "Hi, I'm " + name;
... }
> greet("Gaowei");
"Hi, I'm Gaowei"

二、用纯函数 pure-function,避免 副作用 side-effects

举例说明“非纯函数”,

> let name = "Gaowei";
> function greet() {
... console.log("Hi, I'm " + name);
... }
> greet()
Hi, I'm gaowei

这就不是一个纯函数,因为没有返回结果。

而纯函数则是:

> function greet(name) {
... return "Hi, I'm " + name;
... }

三、使用高阶函数 higher-order-function,函数本身可作为输入或者输出

在高阶函数中,函数本身又可作为输入与输出。

> function setAdjectifier(adjective) {
... return function(description) {
..... return adjective + " " + description;
..... }
... }
> let greatifier = setAdjectifier("great");
> greatifier("meeting")
'great meeting'

四、不要迭代,用 map, reduce 和 filter

map与filter之间的关联与区别,可以参见下面这张图:

帮你精通JS: 从JS中学习函数式编程的五项支柱


五、不要更改输入数据,用不可变更的数据结构

举例,我们惯常的做法常常为:

> let fruits = ['apple', 'banana', 'peach'];
> fruits[2] = 'orange'
'orange'
> fruits
[ 'apple', 'banana', 'orange' ]

上面的mutation的处理方法,将会修改原始数据。

尝试 functional-programming的方式为:

> newFruits = fruits.map( rm => rm == "orange" ? "peach" : rm)
[ 'apple', 'banana', 'peach' ]
> fruits
[ 'apple', 'banana', 'orange' ]

而能够高效处理 immutable 数据的常用库为:Mori, immutable.js, Underscor, Lodash, Ramda 等


相关推荐

RN开发环境的npm私库本地debug调试

manongba · 688浏览 · 2019-05-09 17:03:46
你不知道的浏览器渲染原理

追忆似水年华 · 1362浏览 · 2019-05-09 22:47:56
基于iview的router常用控制方式

追忆似水年华 · 980浏览 · 2019-06-03 10:39:21
编程小知识之 JavaScript 文件读取

manongba · 708浏览 · 2019-06-10 09:16:16
10个省时间的 PyCharm 技巧 赶快收藏!

· 691浏览 · 2019-06-10 09:32:01
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页