35 Go 語言函數語言程式設計
阿新 • • 發佈:2020-06-25
- 函式是一等公民,即函式可以做為變數。
- 純函式,即函式內的操作不可影響到函式外。
Go 語言的函數語言程式設計無需遵循第二點,這一特性為 Go 語言的函數語言程式設計帶來了更大的靈活性。
1. 程式設計示例
接下來我們來分別展示用函數語言程式設計和普通程式設計方式來實現一個累加器,即輸出 1+2+3+…+100 的值。
普通方式實現:
func main() {
a := 0
for i := 1; i <= 100; i++ {
a = a + i
}
fmt.Println(a)
}
函數語言程式設計實現:
package main
import (
"fmt"
)
type iAdder func(int) int
func adder() iAdder {
sum := 0
return func(v int) int {
sum += v
return sum
}
}
func main() {
a := adder()
var s int
for i := 1; i <= 100; i++ {
s = a(i)
}
fmt.Println(s)
}
- 第 7 行:定義函式型別自定義資料型別;
- 第 9~15 行:定義累加器函式;
- 第 18 行:定義變數 a,並將累加器函式作為值賦給變數 a;
- 第 20~22 行:累加 100 次。
執行結果:
兩者比較,就是後者將整個累加過程作為變數放置在了迴圈以外,使得整個累加可以脫離迴圈之外。看起來就像是不斷的對一個傳入的常數進行加工,就像是流水線的一個工具。所以函數語言程式設計在開發過程中經常會用在對資料的長流程處理。例如,錄入身份證號時,要從身份證號中獲取年齡,籍貫、性別等資訊,就可以使用三個函式對身份證號進行順序處理。這樣寫的好處就在於可以隨時增刪其流程。
2. 小結
Go語言的函數語言程式設計比起傳統函數語言程式設計更加靈活,主要在於不需要遵循純函式原則。Go語言的函數語言程式設計主要應用在類似於流水線加工資料的場景,以便於隨時增刪資料處理流程