function-programming

了解FP(Function Programming)

在看javascript的Closure觀念 -> λ-calculus -> FP
就這樣子看到FP


更新記錄

item note
20160817 第一版

目錄


Function Programming

什麼是 Functional Programming">什麼是 Functional Programming

以前是處理數學函數計算,又以 λ演算 (λ calculus) 為基礎
那到底什麼又是 Functional Programming (FP)呢
只需要給我處理後的結果,不需要過問結果如何而來

Functional programming is programming without assignment statements.
來源: functional-programming-basics

  • 一般java寫法

    1
    2
    3
    4
    5
    6
    public class Squint {
    public static void main(String args[]) {
    for (int i=1; i<=25; i++)
    System.out.println(i*i);
    }
    }
  • 改成FP方式
    There are three words in that program: take, squares-of, and integers. Each of those words refers to a function.

    1
    (take 25 (squares-of (integers)))

函数式语言之所以被如此称呼,是因为程序完全是由函数组成的。主程序本身也是一个函数,以程序的输入为参数,并返回其输出

Functional programming wiki">Functional programming wiki

In computer science, functional programming is a programming paradigm

  • a style of building the structure and elements of computer programs
  • that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data.
  • 避免使用程序状态以及易变物件
  • 函數程式語言最重要的基礎是λ演算(lambda calculus)
  • 雖然λ演算並非設計來於計算機上執行,但它可以被視作第一個函數式編程語言
  • LISP 是第一個函數式語言,越來越多函數式語言隨之出現。真實世界的函數式語言無法像 Lambda Calculus 那樣

F# 程式設計入門 ">F# 程式設計入門

  • 函數式編程語言的效率確實比命令式(imperative)編程語言來得差
  • 後又開始重視「簡單」、「快速開發」。想要「簡單」、「快速開發」,就要用比較高階的抽象,因此函數式編程比命令式編程更適合現在的開發環境
  • lambda calculus 的函數可以接受函數當作輸入(引數)和輸出(傳出值)
  • 1958 年,對 lambda calculus 相當感興趣的 MIT 教授 John McCarthy 設計出 Lisp 語言,Lisp 實踐了 lambda calculus

FP 的特點

  • 沒有副作用(Side Effect)。在表示式(expression)內不可以造成值的改變
  • 第一級函數(First-Class Function)。函數被當作一般值對待,而不是次級公民,也就是說,函數可當作「傳入參數」或「傳出結果」
    mperative Programming 認為程式的執行,就是一連串狀態的改變
    但 FP 將程式的運作,視為數學函數的計算,且避免「狀態」和「可變資料」

Functional Programming 教我的事">Functional Programming 教我的事

  • 多核時代,需要能Concurrency的程式
  • 用程序性的OO語言寫Concurrency很難
  • Function Programing讓Concurrency Programming變簡單
  • FP特色
    • Avoiding Mutable State
    • Recursion
    • Higher-Order Functions
      把function做參數傳遞到function裡
      function可以當做function回傳的結果
    • Function Composition
    • Lazy Evaluation
      需要才執行
    • Pattern Matching

參考