[前言]
函式(Function) 指的是將一或多段程式碼包裝起來,並且可以定義不給或是給定帶入的參數值,並可以重複使用。在程式開發中,是非常重要且經常使用的特性。因為它可以讓你的程式碼更方便維護與容易理解。
在之前的文章內有一些練習的連結,大家如果有注意到的話,每個練習都有一個func main() 的主程式函式定義,這也是Golang程式開始執行的進入點。
[函式(Function)之定義]
Golang 定義函式時,利用關鍵字func 放在前面,後面接著函式名稱,而需要輸入的參數型別宣告,則是放在名稱之後的小括號內。如果多個參數有同樣的型別,那麼只要最右邊同型別的名別右方加上型別就可以了。所需要回傳的變數前面須加上return關鍵字。
例如:
func doJob(input1, input2 string) string {
// 列印出輸入的參數內容
fmt.Println("My Data:", input1, input2)
ret := input1 + "-" + input2
return ret
}
值得注意的是,Golang可以有兩個以上的傳回值,且傳回值可以設定名稱。若回傳值超過一個以上,需要用小括號把回傳型別內容放在其中。
例如:
func doJob2(input1, input2 string) (string, string) {
// 列印出輸入的參數內容
fmt.Println("My Data:", input1, input2)
ret1 := input1 + "-" + input2
ret2 := input2 + "-" + input1
return ret1,ret2
}
們在 [用Golang寫小遊戲教學] 第四章 陣列(Array)與切片(Slice) 有個例子: https://go.dev/play/p/2z_2NLAI1Gd
這個例子把所有的程式碼都放到main() 內,這樣不好,我們來改寫它。
試著創造出一個新的函式名稱為myTask() ,並需要輸入型別string的參數myName,來取代原有的程式碼:
func myTask(myData string) {
// 列印出輸入的參數內容
fmt.Println("My Data:", myData)
names := []string{"Tom", "John"}
fmt.Println("names:", names, "長度:", len(names), "容量:", cap(names))
score1 := make([]int, 5) // len=4 cap=4,[0,0,0,0,0]
fmt.Println("score1:", score1, "長度:", len(score1), "容量:", cap(score1))
var names2 []string
names2 = names
names2[0] = "Danny"
fmt.Println("names2:", names2, "長度:", len(names2), "容量:", cap(names2))
score2 := make([]int, 5, 10) // len=5 cap=10, [0,0,0,0,0]
score2[3] = 100
fmt.Println("score2:", score2, "長度:", len(score2), "容量:", cap(score2))
}
而原有的主程式函式main 內的程式碼可以被這個函式myTask所取代。
func main() {
myTask("我準備輸入參數")
}
由於這myTask需要給一個string字串內容,我這邊的例子給了如上述的字串(你可以更換成其他的字串內容):
注意: Golang是強型態的語言,當我們定義myTask函式的輸入myData參數是字串型態後,就不能在呼叫myTask函式時,給定其他型別的值。
我們來試看看這被修改後的完整例子(很簡單吧!):
https://go.dev/play/p/3KSjePvVTLQ
結果:
My Data: 我準備輸入參數
names: [Tom John] 長度: 2 容量: 2
score1: [0 0 0 0 0] 長度: 5 容量: 5
names2: [Danny John] 長度: 2 容量: 2
score2: [0 0 0 100 0] 長度: 5 容量: 10
No comments:
Post a Comment