1. 程式人生 > 資訊 >售價進一步降低?特斯拉磷酸鐵鋰電池版國產Model 3現身工信部

售價進一步降低?特斯拉磷酸鐵鋰電池版國產Model 3現身工信部

昨天看RxJava時提到了函數語言程式設計:

今天在看極客時也遇到了講解:

雖然C語言簡單靈活,能夠讓程式設計師在高階語言特性之上輕鬆進行底層上的微觀控制,被譽為 高階語言中的組合語言 ,
但其基於過程和底層的設計初衷又成了它的短板.

在程式世界中,程式設計工作更多的是解決業務上的問題,而不是計算機的問題,我們需要更為貼近業務,更為抽象的語言,如典型的面嚮物件語言C++和Java等.

C++很大程度上解決了C語言中的各種問題和不便,尤其是通過類,模板,虛擬函式和執行時識別等解決了C語言的泛型程式設計問題.
然而,如何做更為抽象的泛型呢?答案就是函數語言程式設計(Functional Programming)

相對於計算機的歷史而言,函數語言程式設計其實是一個非常古老的概念.函數語言程式設計的基礎模型來源於λ演算,而λ演算並沒有被設計在計算機上執行.
我們來看一下函數語言程式設計,它的理念就來自於數學中的代數

f(x)=5x^2+4x+3
g(x)=2f(x)+5=10x^2+8x+11
h(x)=f(x)+g(x)=15x^2+12x+14

假設f(x)是一個函式,g(x)是第二個函式,把f(x)這個函式套下來,並展開.然後還可以定義一個由兩個一元函式組合成的二元函式,還可以做遞迴,下面這個函式定義就是斐波那契數列

f(x)=f(x-1)+f(x-2)

對於函數語言程式設計來說,它只關心定義輸入資料和輸出資料相關的關係,數學表示式裡面其實是在做一種對映(mapping),
輸入的資料和輸出的資料關係是什麼樣的,是用函式來定義的.

函數語言程式設計有以下特點:

特徵

  • stateless: 函式不維護任何狀態.函數語言程式設計的核心精神是stateless,簡而言之就是它不能存在狀態,打個比方,你給我資料我處理完扔出來.裡面的資料是不變的.
  • immutable: 輸入資料是不能動的,動了輸入資料就有危險,所以要返回新的資料集.

優勢:

  • 沒有狀態就沒有傷害
  • 並行執行無傷害
  • Copy-Paste重構程式碼無傷害
  • 函式的執行沒有順序上的問題

函數語言程式設計還帶來了以下一些好處:

  • 惰性求值: