---
# System prepended metadata

title: chapter４複雑な処理をまとめる関数
tags: [1日で基本が身につくGo言語]

---

# chapter４複雑な処理をまとめる関数
# section1プログラミングで言う関数

今まで使用してきたPlintln関数、Printf関数、Goプログラムの基本となるmain関数などの事を<u>**標準関数**</u>と呼ぶ。これらは言語にあらかじめ実装されているものである。

前章の割り算プログラムでは変数thenumの値のみしか計算することができなかった。特定の値だけしか計算できないため、他の値で計算したい場合はプログラムを書き換えるか、違うプログラムを作る必要があった。しかし、これらは自身で関数を作成し活用することにより解決することが可能である。

```
package main

import "fmt"

func getfactors(thenum int) {
	fmt.Println(thenum)
	for n := 0; n < thenum; n++ {
		switch {
		case n == 0:
		case n == 1:
		case thenum%n == 0:
			thenum /= n
			fmt.Printf("を%dで割ると、%d\n", n, thenum)
		default:
		}
	}
	fmt.Println()
}

func main() {
	getfactors(2310)
	getfactors(37789)
	getfactors(1256997)
}
実行結果
2310
を2で割ると、1155
を3で割ると、385
を5で割ると、77
を7で割ると、11

37789
を23で割ると、1643
を31で割ると、53

1256997
を3で割ると、418999
を7で割ると、59857
を17で割ると、3521
を503で割ると、7
```

```
func scoreavg (scores []int)int{
sum :=0
for i := 0; i <len(scores); i++{
sum += scores[i]
}
return sum / len(scores)
}
```


Go言語で関数を定義する際に重要となる書き方は6点ある。**関数の定義はfuncで書き始める**。**funcの後に関数名を書き始める**。
関数名の後に、**括弧を置いてその中に処理を用いる値を代入する為の変数名を置く**。この変数は**この関数の中でだけ利用**されます。このように関数に値を渡すための変数を**引数**と呼ぶ。引数も変数の一つであるため、**データ型を指定する必要がある**。引数scoresのデータ型は整数を要素とする配列のスライスです
intは**戻り値**と呼ぶ。式の結果が値になるのと同じように、関数も結果として値を返す。慣例的に関数は値を「戻す」と呼ぶため、この値を「戻り値」と呼ぶ。引数の情報である。scores intを囲んだ**括弧のすぐあとに戻り値のデータ型を描く**。この関数は**int型の値を戻すように定義**している。
ただし、関数を値に**戻さないこともある**。getfactors関数は処理だけを行い、値を戻していない。
関数が値を戻す場合、処理の最後に**「return」という語と共に戻り値を書く**。実際に**戻す値のデータ型は定義した戻り値の型と一致しなければいけない**。この関数では計算した結果である整数を戻している。また、戻り値には変数名を付けていない・関数名が戻り値の変数名と同様の役割をするからである。

###### tags:`1日で基本が身につくGo言語`