新聞中心
一、什么是函數(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ì),值得信賴!
- input --> process -- output
FP函數(shù)式編程是一種思維方式:
比如非函數(shù)式,會這樣寫程序:
- > var name = "gaowei";
- > var greeting = "Hello,I'm ";;
- > console.log(greeting + name)
- Hello,I'm gaowei
而函數(shù)范式編程則會這樣寫程序:
- > function greet(name) {
- ... return "Hi, I'm " + name;
- ... }
- > greet("Gaowei");
- "Hi, I'm Gaowei"
二、用純函數(shù) pure-function,避免 副作用 side-effects
舉例說明“非純函數(shù)”,
- > let name = "Gaowei";
- > function greet() {
- ... console.log("Hi, I'm " + name);
- ... }
- > greet()
- Hi, I'm gaowei
這就不是一個純函數(shù),因為沒有返回結(jié)果。
而純函數(shù)則是:
- > function greet(name) {
- ... return "Hi, I'm " + name;
- ... }
三、使用高階函數(shù) higher-order-function,函數(shù)本身可作為輸入或者輸出
在高階函數(shù)中,函數(shù)本身又可作為輸入與輸出。
- > function setAdjectifier(adjective) {
- ... return function(description) {
- ..... return adjective + " " + description;
- ..... }
- ... }
- > let greatifier = setAdjectifier("great");
- > greatifier("meeting")
- 'great meeting'
四、不要迭代,用 map, reduce 和 filter
map與filter之間的關(guān)聯(lián)與區(qū)別,可以參見下面這張圖:
五、不要更改輸入數(shù)據(jù),用不可變更的數(shù)據(jù)結(jié)構(gòu)
舉例,我們慣常的做法常常為:
- > let fruits = ['apple', 'banana', 'peach'];
- > fruits[2] = 'orange'
- 'orange'
- > fruits
- [ 'apple', 'banana', 'orange' ]
上面的mutation的處理方法,將會修改原始數(shù)據(jù)。
嘗試 functional-programming的方式為:
- > newFruits = fruits.map( rm => rm == "orange" ? "peach" : rm)
- [ 'apple', 'banana', 'peach' ]
- > fruits
- [ 'apple', 'banana', 'orange' ]
而能夠高效處理 immutable 數(shù)據(jù)的常用庫為:Mori, immutable.js, Underscor, Lodash, Ramda 等。
名稱欄目:從JS中學習函數(shù)式編程的五項支柱
URL鏈接:http://fisionsoft.com.cn/article/dpjddph.html


咨詢
建站咨詢
