日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
從JS中學習函數(shù)式編程的五項支柱

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

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

創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!

 
 
 
 
  1. input --> process -- output  

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

比如非函數(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 等。


當前題目:從JS中學習函數(shù)式編程的五項支柱
網(wǎng)站地址:http://m.5511xx.com/article/dpjddph.html