当前位置:主页 > 查看内容

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

发布时间:2021-04-18 00:00| 位朋友查看

简介:一、什么是函数式编程 从FP函数式编程的眼中看来,世界的万事万物就是处理数据流: input --process--output FP函数式编程是一种思维方式: 比如非函数式,会这样写程序: var name = gaowei ; vargreeting= Hello,I'm ;; console.log(greeting+ name ) Hello……

 一、什么是函数式编程

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


本文转载自网络,原文链接:https://www.toutiao.com/i6937920873013756449/
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐