昨天介紹了在 Go 語言中的型別檢查,今天要介紹其實前面章節的範例也經常出現的函式 (function)。
函式 (function) 可以說是大部分程式語言的必備,我們將一段要執行程式碼放在函式裡面,需要用時呼叫函式。
在大部分其他的程式語言中,函式正常會回傳一個輸出值,但 Go 語言中函式可以完全 沒有輸入值和輸出值 ; 也可以 一次有多個輸入和輸出值 。
且在 Go 語言中的函式是 First-class Function ,也就是一個函式可以當作另一個函式的引數或是回傳值,而可以接收其他函數為引數的函式,也可以稱為 高階函式 (higher-order functions) 。
上面說函式是許多程式語言的必備,但你要跟我說為什麼啊,有什麼好處呀?這邊立馬舉幾個使用函式的優點,讓大家看完之後發現函式絕對不可或缺呀~
當今天接收到一個複雜的任務,我們可以使用函式將其分解為,由多個小小的任務組成的原本複雜任務,且當你將複雜任務分切成小小任務函式,小任務的函式更加容易寫以及讀取,且讓不同函式完成不同的任務,可以讓程式碼更加容易維護。
當我們發現有重複的動作需要在很多地方執行時,這時若是將這段程式包裝成函式,且在需要用到時呼叫函式,就可以精簡程式碼,不會讓你一直寫重複的 code ,且包裝成函式也非常易於維護,今天有需要修改時,只需要修改函式內,不需要多次修改。
上面有說到我們將一段重複出現的函式包裝好後,我們便可以在多處呼叫函式,可以節省開發時間。
要寫出函式並不困難,但是要寫出漂亮的函式絕對需要多加練習,當我們在開發定義函式時,可以經常想起以下兩個特點,一起寫出漂亮的函式吧。
正常來說一個函式應該只負責一件事,因為這樣測試起來較容易,且後續也較好維護。
保持簡潔的程式碼,可以減短除錯的時間,以及更好撰寫單元測試。
其實以上簡而言之,就是我們需要盡量將函式切分成越細越好,讓他一次只做一件事,且避免一個函式裡面有太長的程式碼,畢竟一個函式裡有 100 行程式碼,基本上就是沒有遵守單一責任制。
在 Go 語言中宣告函式如下:
func add(i, j, int) int {
// 執行的程式碼
}
以上第一行翻成中文如下:
<宣告函式> <函式名稱>(<參數清單>) <回傳型別>
在 Go 語言中函式宣告一律使用 func
關鍵字。 func 可以在套件層級內各處用來定義函式。
在 Go 語言中函式名稱使用駝峰式大小寫 (camelCase) 來命名,簡單來說就是首字字母小寫,後面的單字都以大寫開頭,如: totalSum 。
且函式名稱正常可以代表這個函式的用意,就像是這個函式是在算總和的,我們會取名為 totalSum ,而不是 happyDay 真的在亂取哈哈 。
補充:
在 Go 語言中一般變數名稱也是使用駝峰式大小寫 (camelCase) 來命名。
參數 (parameters) 是函數的傳入值、函式執行時所需的資料,也是函式內的區域變數。一個函式可以有很多參數,也可以都沒有參數。
<名稱 1> <型別 1>, <名稱 2> <型別 2>...
會長成如下的樣子:
name string, age int
當今天函式的參數型別都相同時,我們也可以簡化成:
name, email, address string
顧名思義就是回傳的資料型別,如: string、bool 等。在 Go 語言中,可以一次有多個回傳值,也可以沒有回傳值。
若函式有定義回傳型別,函式本身就需要有 return 敘述(可以有不只一個 return 敘述)。 return 敘述會使韓式停止,並回傳列在 return 後的值,而皆些值得型別必須與宣告時回傳型別相同。
補充:
在 Go 語言中,函式的左邊大括號 { 必須跟函式在同一行,若是不小心換行了,在編譯時便會出現錯誤。
今天先簡單了解在 Go 語言中函式 (function) 介紹及宣告函式,明天繼續深入探討函式,明天見~~