関数宣言
以前の実験では、プログラムが簡単であれ複雑であれ、操作にはmain
関数のみを使用してきました。
プログラムは1つのmain
関数のみを持つことができ、これはプログラムのエントリポイントです。プログラムを実行すると、他の関数がmain
関数内で直接または間接的に呼び出されて実行されます。
では、関数の構文を見てみましょう。
func functionName(parameters...)(returnValues...){
code block
}
ここで、関数名は関数を識別するために使用されます。関数名には次のルールが適用されます。
- 英字、数字、アンダースコアで構成できます。ただし、関数名の最初の文字は数字ではなければなりません。たとえば、
func 3ab(){}
は無効です。
- 最初の文字が大文字の場合、外部パッケージのコードから参照できます。最初の文字が小文字の場合、パッケージ内でのみ使用できます。これは、パブリック関数とプライベート関数に似ています。
パラメータリストは、関数に渡されるパラメータの数と型を宣言します。
-
パラメータリストは空でもよく、複数のパラメータを含んでもよいです。
-
各パラメータは、パラメータ名とパラメータ型で構成されます。たとえば、次のパラメータリストでは、int
型の2つの変数を宣言しています。
func test(a, b int) (res int){}
戻り値リストは、関数の実行後に必要な値を返すために使用されます。
-
戻り値リストはパラメータリストと似ています。パラメータの数は任意の値です。
-
一般的に、戻り値リストは変数名と変数型で構成され、変数名は省略可能です。
-
1つの変数のみを返し、変数型のみを宣言する場合、丸括弧を省略できます。たとえば:
func test(a int, b string) int{}
パラメータ型が同じ場合、短縮表記モードを使用できます。次の2つの関数は同じ機能を持っています。
func test(a, b int, c, d string)(res1, res2 int, res3 string){}
// 短縮表記モード
func test(a, b int, c, d string)(res1, res2 int, res3 string){}
func.go
の内容を次のコードに置き換えます。
package main
import "fmt"
func check(divisor int) bool {
if divisor == 0 {
fmt.Println("The divisor cannot be 0")
return false
}
return true
}
func main() {
a1, b1 := 12, 4
a2, b2 := 12, 0
// 除算前にcheck関数を使用する
if check(b1) {
fmt.Println(a1 / b1)
}
if check(b2) {
fmt.Println(a2 / b2)
}
}
再度、プログラムを実行します。
go run func.go
同じ出力が表示されるはずです。
3
The divisor cannot be 0
今回は、チェックロジックがcheck
関数にカプセル化されており、コードがクリーンになり、再利用性が向上しています。