1. 程式人生 > >函數式編程基本概念

函數式編程基本概念

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)

滿足純函數的條件:

  1. 函數的執行結果只依賴於它的參數
  2. 函數在執行過程裏面沒有副作用
const root = window
const reactive = (name => {
  console.log(name, root)
})

// reactive 不是純函數,因為它的執行依賴函數的外部變量 root

DOM操作/數據庫操作等具有副作用,因為它們改變了外部數據

純函數的優點:

  • 可讀性好
  • 代碼可測
  • 易於復用

函數式編程基本概念