WEB开发者-分享WEB开发知识,让开发变得更简单!

从JS中学习函数式编程的五项支柱

从JS中学习函数式编程的五项支柱

 一、什么是函数式编程

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

  1. input --> process -- output  

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

从JS中学习函数式编程的五项支柱

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

  1. > var name = "gaowei"
  2. > var greeting = "Hello,I'm ";; 
  3. > console.log(greeting + name
  4. Hello,I'm gaowei 

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

  1. function greet(name) { 
  2. ... return "Hi, I'm " + name
  3. ... } 
  4. > greet("Gaowei"); 
  5. "Hi, I'm Gaowei" 

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

举例说明“非纯函数”,

  1. > let name = "Gaowei"
  2. function greet() { 
  3. ... console.log("Hi, I'm " + name); 
  4. ... } 
  5. > greet() 
  6. Hi, I'm gaowei 

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

而纯函数则是:

  1. function greet(name) { 
  2. ... return "Hi, I'm " + name
  3. ... } 

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

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

  1. function setAdjectifier(adjective) { 
  2. ... return function(description) { 
  3. ..... return adjective + " " + description; 
  4. ..... } 
  5. ... } 
  6. > let greatifier = setAdjectifier("great"); 
  7. > greatifier("meeting"
  8. 'great meeting' 

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

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

从JS中学习函数式编程的五项支柱

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

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

  1. > let fruits = ['apple''banana''peach']; 
  2. > fruits[2] = 'orange' 
  3. 'orange' 
  4. > fruits 
  5. 'apple''banana''orange' ] 

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

尝试 functional-programming的方式为:

  1. > newFruits = fruits.map( rm => rm == "orange" ? "peach" : rm) 
  2. 'apple''banana''peach' ] 
  3. > fruits 
  4. 'apple''banana''orange' ] 

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

【编辑推荐】

  1. 跟妹妹聊到 Java 16 新特征,真香!
  2. IT项目过多,管理太难?NO!因为你还没学会这七招
  3. 学了五年Python,这些网站让我相见恨晚,快来一起见识一下
  4. Java都到16了,为什么都还在用8,是越做越烂了么?
  5. 实在太神奇!Windows10这些黑科技小功能你都用过吗

本文链接:https://www.webkfz.com/zixun/mxhk.html

版权声明:站内所有文章皆来自网络转载,只供分享作用,不代表本站的观点!

发表评论 共有 0 条评论)

联系客服
网站客服 业务合作 QQ
1244305267
公众号
公众号
公众号
返回顶部