自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從JS中學(xué)習(xí)函數(shù)式編程的五項支柱

開發(fā) 前端
本篇個大家介紹關(guān)于函數(shù)式編程的相關(guān)知識,希望對你有所幫助!

[[389312]]

 一、什么是函數(shù)式編程

從FP函數(shù)式編程的眼中看來,世界的萬事萬物就是處理數(shù)據(jù)流:

  1. input --> process -- output  

FP函數(shù)式編程是一種思維方式:

[[389313]]

比如非函數(shù)式,會這樣寫程序:

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

 而函數(shù)范式編程則會這樣寫程序:

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

 二、用純函數(shù) pure-function,避免 副作用 side-effects

舉例說明“非純函數(shù)”,

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

 這就不是一個純函數(shù),因為沒有返回結(jié)果。

而純函數(shù)則是:

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

 三、使用高階函數(shù) higher-order-function,函數(shù)本身可作為輸入或者輸出

在高階函數(shù)中,函數(shù)本身又可作為輸入與輸出。

  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之間的關(guān)聯(lián)與區(qū)別,可以參見下面這張圖:

五、不要更改輸入數(shù)據(jù),用不可變更的數(shù)據(jù)結(jié)構(gòu)

舉例,我們慣常的做法常常為:

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

 上面的mutation的處理方法,將會修改原始數(shù)據(jù)。

嘗試 functional-programming的方式為:

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

 而能夠高效處理 immutable 數(shù)據(jù)的常用庫為:Mori, immutable.js, Underscor, Lodash, Ramda 等。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2009-10-09 09:24:19

軟件項目管理

2021-06-29 16:12:21

詞: 云架構(gòu)混合云云計算

2010-09-30 14:51:02

保護數(shù)據(jù)安全

2022-05-12 15:43:08

數(shù)據(jù)安全數(shù)字化黑客

2022-09-07 14:44:55

物聯(lián)網(wǎng)網(wǎng)絡(luò)安全

2010-09-09 13:15:59

提高VPN質(zhì)量

2018-05-04 08:46:29

Node.js數(shù)據(jù)挖掘Azure

2020-03-16 08:48:18

Kubernetes容器云原生

2016-04-18 10:25:53

DevOps自動化

2017-04-12 22:19:20

2022-02-13 00:24:33

開發(fā)VueJavaScrip

2019-07-30 09:00:00

Snowflake數(shù)據(jù)庫性能調(diào)優(yōu)

2023-06-27 10:21:14

2023-03-02 08:47:31

IT預(yù)算熱點

2024-01-07 13:25:32

Go編程代碼

2024-01-15 06:45:29

Go編程代碼

2021-11-28 21:33:20

人工智能區(qū)塊鏈物聯(lián)網(wǎng)

2019-10-31 10:16:06

數(shù)據(jù)Python開發(fā)

2023-06-09 19:03:35

開源組織

2016-12-20 09:29:15

開源文檔領(lǐng)域趨勢
點贊
收藏

51CTO技術(shù)棧公眾號