函數式編程(functional programming)又稱函數程序設計、泛函編程,是一種編程範式,它將計算機運算視爲函數運算,而且避免使用程序狀態以及易變對象。其中,λ演算(lambda calculus)爲該語言最重要的基礎。並且,λ演算的函數能夠接受函數看成輸入(引數)和輸出(傳出值)。比起指令式編程,函數式編程更增強調程序執行的結果而非執行的過程,倡導利用若干簡單的執行單元讓計算結果不斷漸進,逐層推導複雜的運算,而不是設計一個複雜的執行過程。php
其主要分爲三類:純函數式編程語言,非純函數式編程語言,其餘函數式編程語言html
純函數式編程語言:編程
非純函數式編程語言:數據結構
函數式編程的歷史: 函數式編程
函數式編程中最古老的例子莫過於1958年被創造出來的Lisp了。函數式編程更加現代一些的例子包括Clean、Clojure、Erlang、Haskell、Miranda、Scheme等。函數
雖然λ演算並不是設計來於計算機上運行,但它能夠被視做第一個函數式編程語言。1980年代末期,集函數式編程研究成果於大成的Haskell發佈。優化
基於JavaScript的某些開發理念強調函數式的實現方法。spa
爲何函數式編程愈來愈受關注:設計
函數式編程語言使咱們可以用高層次的抽象取代其餘核心構建塊,並更注重結果而不是步驟。
函數式編程的特色之一是存在強大的抽象,它隱藏了許多平常操做的細節(好比迭代)
|
函數式語言在更細化的級別提供重用,在列表和映射等基本數據結構之上經過高階函數提供定製,從而實現重用。
在面向對象的命令式編程語言中,重用的單元是類以及與這些類進行通訊的消息,這些信息是在類圖中捕獲的。該領域的開創性著做是 Design Patterns: Elements of Reusable Object-Oriented Software,至少爲每一個模式提供一個類圖。在 OOP 的世界中,鼓勵開發人員建立獨特的數據結構,以方法的形式附加特定的操做。函數式編程語言嘗試採用不一樣的方式來實現重用。它們更喜歡一些關鍵的數據結構(如列表、集和映射),而且在這些數據結構上採用高度優化的操做。傳遞數據結構和高階函數,以便 「插入」 這種機制,針對某一特定用途對其進行定製。
函數式編程的目標之一是最大程度地減小可變狀態。