什么是函數(shù)式編程
函數(shù)式編程(Functional Programming, FP),FP是編程范式之一,可以認(rèn)為是一種編程風(fēng)格,是一種思維模式和實現(xiàn)的方法,我們經(jīng)常聽說的編程范式還有面向過程編程、面向?qū)ο缶幊痰?
- 面向過程編程的思維方式:簡單來說就是按照步驟來實現(xiàn),一步一步來實現(xiàn)我們想要的功能浩峡。
- 面向?qū)ο缶幊痰乃季S方式:把現(xiàn)實世界中的事物抽象成編程世界中的類和對象,通過封裝可岂、繼承和多態(tài)來演示事物之間的內(nèi)在聯(lián)系
- 函數(shù)式編程的思維方式:把現(xiàn)實世界中的事物和事物之間的聯(lián)系抽象到程序世界 (對運算的過程進行抽象)
- 程序的本質(zhì):根據(jù)輸入通過某種運算獲得相應(yīng)的輸出,在程序開發(fā)過程中會涉及很多有輸入和輸出的函數(shù)
- x-f(聯(lián)系,映射)->y, y=f(x),x就是輸入,f運算過程就是函數(shù)式編程中的函數(shù),y就是結(jié)果輸出,通過y=f(x)來表述運算過程
- 函數(shù)式編程中的函數(shù)指的不是程序中的函數(shù)(方法),而是數(shù)學(xué)中的函數(shù)即映射關(guān)系,例如: y= cos(x),cos就是函數(shù)用來描述y與x的關(guān)系,一但x確定了y也就確定了
- 相同的輸入始終要得到相同的輸出(純函數(shù))
總結(jié)來說:函數(shù)式編程就是對運算過程的抽象
說了這么多來個簡單例子鞏固下
比如說求2個數(shù)的和然后輸出結(jié)果
//非函數(shù)式編程
let num1 = 2;
let num2 = 2;
let sum = num1 + num2;
console.log(sum);
//函數(shù)式編程
function add (n1, n2) {
return n1 + n2;
}
let sum = add(1, 2);
非函數(shù)式編程的方式是先定義2個變量(num1和num2),然后2個數(shù)在相加賦值給新的變量(sum),最后在打印,是通過步驟一步一步來實現(xiàn)的,是面向過程的方式.
函數(shù)式編程的思想,對運算過程進行抽象,要計算2個數(shù)的和,首先抽象一個函數(shù)(add)用來計算2個數(shù)的和,這個函數(shù)接受2個參數(shù),當(dāng)函數(shù)運算完畢返回一個計算結(jié)果,定義完函數(shù)可以調(diào)用這個函數(shù)了.
相對于非函數(shù)式編程,當(dāng)使用函數(shù)式編程就一定會定義一些函數(shù),這些函數(shù)也就可以被復(fù)用,并且定義的函數(shù)也一定是顆粒度很細的函數(shù),將來也可以把這些函數(shù)在組合生成功能更加強大的函數(shù),還有很多優(yōu)勢就不一一在說了,有興趣的同學(xué)可以自行查閱.