函數式編程基本概念
阿新 • • 發佈:2018-09-03
ati 數據庫 oot 程序 結構 代碼 lar 優點 roo
編程範式
- 命令式編程(Imperative)
- 聲明式編程(Declarative)
- 函數式編程(Functional)
面向對象、泛型、元編程 也都是很主要的編程範式
命令式編程: 命令式編程的主要思想是關註計算機執行的步驟,即一步一步告訴計算機先做什麽再做什麽
聲明式編程: 聲明式編程是以數據結構的形式來表達程序執行的邏輯
函數式編程: 函數式編程和聲明式編程是有所關聯的,因為他們思想是一致的:即只關註做什麽而不是怎麽做
針對“將數組元素的的每項變為原來的2倍” 體驗命令式編程和聲明式編程的區別
// 命令式編程 const double = (list) => { let result = [] for (let i = 0; i < list.length; i++) { result[i] = 2 * i } return result } // 聲明式編程 const list = [] const result = list.map(item => 2 * item)
頭等函數(first-class function)
高階函數(high-order function)
- 接受一個或多個函數作為輸入
- 或輸出一個函數
純函數(pure function)
滿足純函數的條件:
- 函數的執行結果只依賴於它的參數
- 函數在執行過程裏面沒有副作用
const root = window
const reactive = (name => {
console.log(name, root)
})
// reactive 不是純函數,因為它的執行依賴函數的外部變量 root
DOM操作/數據庫操作等具有副作用,因為它們改變了外部數據
純函數的優點:
- 可讀性好
- 代碼可測
- 易於復用
函數式編程基本概念