プログラムの中で、何度も使う処理は、関数というものにまとめておくことができます。関数を使うと、コードを管理しやすくなります。
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
rand.Seed(time.Now().Unix())
someFunc()
someFunc()
someFunc()
someFunc()
someFunc()
}
func someFunc() {
fmt.Println("サイコロの目は", rand.Intn(6)+1, "です")
}
関数は、func キーワードを先頭に記述し、そのあとに任意の関数名を記述して ( ) をつけます。
関数の処理は、{ }(波括弧)の中に記述します。複数行の処理も記述できます。
関数を呼び出す(使う)場合は、関数名( ) というように必ず ( ) をつけます。
この例では、サイコロの目を5回表示していますが、テストの点を5回表示するように変更するには、someFunc 関数の fmt.Println だけを変更すれば良いので、プログラムの管理が楽になります。
関数には、引数(ひきすう)という仕組みを使って、値を渡すことができます。
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
rand.Seed(time.Now().Unix())
for i := 1; i <= 5; i++ {
someFunc(i, rand.Intn(6)+1)
}
}
func someFunc(time int, dice int) {
fmt.Println(time, "回目のサイコロの目は", dice, "です")
}
1 回目のサイコロの目は 5 です
2 回目のサイコロの目は 4 です
3 回目のサイコロの目は 6 です
4 回目のサイコロの目は 2 です
5 回目のサイコロの目は 5 です
someFunc(i, rand.Intn(6)+1)
関数に値を渡すには、( ) の中に渡したい値を記述します。この関数に渡す値のことを実引数と言います。複数の値を渡したい場合は、値を , (カンマ)で区切ります。
func someFunc(time int, dice int) {
値を受け取る関数側では、値を受け取るための変数名と、その変数の型を ( ) の中に記述します。この値を受け取るための変数を、仮引数と言います。値を受け取る変数が、複数ある場合は、変数を ,(カンマ)で区切ります。
fmt.Println(time, "回目のサイコロの目は", dice, "です")
関数内で、受け取った値を使うには、値を受け取った変数名をそのまま記述します。
関数は、値を返すこともできます。この関数から返される値のことを、戻り値と言います(返り値とも言いますが、返り血が連想されるので、戻り値と言う場合多いみたいです)
package main
import ("math/rand"
"time"
"fmt"
)
func main() {
rand.Seed(time.Now().Unix())
fmt.Println( someFunc(rand.Intn(101)) )
}
func someFunc(score int) string {
result := ""
switch {
case score >= 80:
result = "成績はAです"
case score >= 70:
result = "成績はBです"
case score >= 60:
result = "成績はCです"
default:
result = "また頑張りましょう"
}
return result
}
// 以下のどれかがランダムに表示されます
成績はAです
また頑張りましょう
成績はCです
成績はBです
fmt.Println( someFunc(rand.Intn(101)) )
関数の戻り値は、関数を呼び出した位置に返ってきます。
func someFunc(score int) string {
関数が戻り値を返すようにするには、関数を定義する時に、仮引数の ( ) のあとに、戻り値の型を記述します。
return result
関数で戻り値を返すには、return キーワードを使います。戻り値を返すように定義した関数では、戻り値を返さなかったり、違う型の値を返そうとするとエラーになります。また、戻り値を返す関数は、戻り値を return した時点で、その関数は終了します。