前言:當前只做理解性的常規背書,根據不斷深入學習會不斷豐富解讀內容,歡迎評論提意見
函數式編程:Functional Programming
1 基本解釋:
函數式編程 是一種思維模式,一種編程思想,一種編程方式,一種編程范式
2 基本特性:
不使用可變的變量處理 賦值,循環和其他命令式控制結構去編程:
好處:2.1 函數即不依賴外部的狀態也不修改外部的狀態:函數調用的結果不依賴調用的時間和空間狀態,這樣寫的代碼容易進行推理,不容易出錯。這使得單元測試和調試都更容易。
2.2 線程安全:函數式編程可以幫我們解決這一痛點,每一個純函數都是線程安全
時間狀態:變量一旦有了狀態,它就有可能隨着時間而發生變化,時間是最不可預知的因素
空間狀態:如果把一個線程看成一個獨立的空間,在程序的世界當中,空間會產生交叉重疊。一個變量如果可以被兩個線程同時訪問,它的值如果可以在兩個空間發生變化,這個變量同樣變得很危險
3 常規關鍵字
3.1高階函數:參數為函數或返回值為函數的函數 //函數式編程就是指這種高度抽象的編程范式
3.2惰性求值:就是我們常常口語化的“懶加載”,表達式賦值給變量時,並不會馬上參與計算求值,是當變量被調用時候才會計算。通過按需加載計算提升性能
4感悟:(1)函數式編程並不會減少我們的代碼量,它改變的只是我們書寫代碼的方式
(2) 編程方式表達更接近於自然語言,調用表達可直譯(對命名准確性要求高),注重結果。
5使用舉例:
OC中
- (void)getLastestYZToken:(void (^)(BOOL isSuccess))callBlock//參數是閉包block 自己在平時的開發中“不小心”就會使用函數式編程思想 {
callBlock(isSuccess);
}
參考:
1 http://www.cocoachina.com/ios/20161209/18325.html
2 http://blog.csdn.net/qinyuanpei/article/details/54986613
3 https://www.zhihu.com/question/28292740