Functional Programming 中文:函數式程式設計,是程式設計方法 (programming paradigm) 的其中一種
所謂的 Functional Programming 是以數學函數的概念來設計程式,並避免有狀態 (state) 與避免可變資料 (mutable data)
以下是一些 Functional Programming 的特點
Pure functions (純函數)
函數會基於傳入的參數來回傳結果,不依懶全域變數
只要給一個 function 相同的傳入參數,就一定會得到相同的回傳結果,不會有任可的副作用 (side effects)
|
|
First-class and Higher-order functions (一等公民,高階函數)
First-class 是指函數可以當做一種資料型別,好比直接賦值到變數中,存放到資料結構當中
Higher-order functions 是指函數可以當作參數傳遞或是其他函數的回傳值
|
|
Recursion (遞迴)
Functional Programming 通常用遞迴來完成迭代
|
|
但是在現實情況下,考慮到效能問題,多數還是以迴圈 (loops) 為主
Lazy evaluation (延遲執行)
Lazy evaluation 是指說程式只會在需要的時候才運行,可以提升程式的效能
Go 中有 closures, goroutines 跟 channels 可以達到 Lazy evaluation 的效果
|
|
小結
尋找適合的場景善加運用 Functional programming,
讓單元測試 (unit test) 更加容易,提高可維護性 (maintainable)
我自己會從復雜的運算中整理出一些純綷的邏輯,以 Functional programming 的方式實作