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

 一、什么是函数式编程

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

创新互联是网站建设技术企业,为成都企业提供专业的网站建设、成都网站制作,网站设计,网站制作,网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制适合企业的网站。十多年品质,值得信赖!

 
 
 
 
  1. input --> process -- output  

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

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

 
 
 
 
  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之间的关联与区别,可以参见下面这张图:

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

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

 
 
 
 
  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 等。

网站栏目:从JS中学习函数式编程的五项支柱
链接分享:http://www.shufengxianlan.com/qtweb/news12/141812.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联