RxJava2.x 學習筆記(一)函數語言程式設計

helloa發表於2018-05-09

函數語言程式設計

介紹

程式語言有量大流派,命令式(imperative)和函式式(functional).

指令式程式設計語言(比如C, C++, Java, Python等),通過給計算機一系列指令來完成任務,和這些指令配合的是資料的變化,比如宣告一個變數a=5,稍後做一些操作,這個a會變成6或者其他值。你可以通過控制指令執行邏輯和流程來完成這樣的操作,得到結果。這個過程和計算機本身的設計比較接近。 當代計算機是馮諾伊曼結構的,基於CPU+記憶體+匯流排的結構構建整個計算本身。

在純函式的語言中,你並不是告訴計算機一步一步的指令,而是告訴計算機如何計算。比如說,計算n的階乘,在純函式中,描述是n的階乘=n*n-1的階乘。

你不能改變一個變數的值,因為你已經宣告瞭a=5,a就是5,無法改變;事實上,在純函式中,根本就沒有變數這個概念。

在純函式語言中,函式是沒有副作用的,對於相同的輸入引數,純函式保證會有相同的輸出。

以haskell為例

haskell函式定義的格式

函式名 :: 引數1的型別 -> 引數2的型別 -> ... -> 結果的型別
函式名 引數1 引數2 .. = 函式體

add :: Int -> Int -> Int
add a b = a + b
複製程式碼

是不是很類似數學公式:f(x,y)=x+y; 是的,函數語言程式設計語言起源於數學。

lambda表示式

λ表示式是書寫函式的一種方式,如下所示:

函式名 :: 引數1的型別 -> 引數2的型別 -> ... -> 結果的型別
函式名 = \引數1 ->  \引數2 -> ... -> 函式體

add :: Int -> Int -> Int
add = \a -> \b -> a + b

--簡化寫法
add = \a b -> a + b  
複製程式碼

map

資料轉換

monand

深入學習的參考材料

待續

相關文章