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

开发 前端
本篇个大家介绍关于函数式编程的相关知识,希望对你有所帮助!

[[389312]]

 一、什么是函数式编程

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

  1. input --> process -- output  

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

[[389313]]

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

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

 

责任编辑:姜华 来源: 今日头条
相关推荐

2009-10-09 09:24:19

软件项目管理

2021-06-29 16:12:21

词: 云架构混合云云计算

2010-09-09 13:15:59

提高VPN质量

2022-09-07 14:44:55

物联网网络安全

2022-05-12 15:43:08

数据安全数字化黑客

2010-09-30 14:51:02

保护数据安全

2019-07-30 09:00:00

Snowflake数据库性能调优

2023-06-27 10:21:14

2016-04-18 10:25:53

DevOps自动化

2022-02-13 00:24:33

开发VueJavaScrip

2017-04-12 22:19:20

2018-05-04 08:46:29

Node.js数据挖掘Azure

2020-03-16 08:48:18

Kubernetes容器云原生

2023-03-02 08:47:31

IT预算热点

2024-01-07 13:25:32

Go编程代码

2024-01-15 06:45:29

Go编程代码

2016-12-20 09:29:15

开源文档领域趋势

2023-07-17 09:54:57

2019-10-31 10:16:06

数据Python开发

2023-06-09 19:03:35

开源组织
点赞
收藏

51CTO技术栈公众号