関数(Go言語)
今回は,前回の変数に引き続き,関数について学習していきましょう!
それでは~Go!
関数って何?
関数とは,「何かを入れて,何かが出てくる仕組み」です!(←ざっくりw)
たとえば,
100円(引数) ⇒ 自動販売機(関数) ⇒ ピザ(戻り値)
みたいな感じで,自販機に100円入れたら,ピザがでてきた!とすると,
この自販機は,立派な関数です.
そして,ソフトウェアの世界では,
100円のことを,「引数」
自販機のことを,「関数」
ピザ のことを,「戻り値」
と呼びます.かたくるしーですねぇ~w
以上が関数の説明です!(←ほんとにだいじょぶ?)
それでは,Go言語の関数を見ていきましょー!
説明用のソースコードの全文
本日の説明用コードは,下記の通りです!
package main
import (
"fmt" //標準入出力関数の標準パッケージ
)
func main() {
/*
戻り値が1つの関数
*/
var ret int // 整数型の変数を宣言
ret = Add1(1, 2)
fmt.Println("ret = ", ret)
ret = Add2(1, 2)
fmt.Println("ret = ", ret)
ret = Add3(1, 2)
fmt.Println("ret = ", ret)
/*
戻り値が複数の関数
*/
x, y := Swap1(1, 2)
fmt.Println("x,y = ", x, ",", y)
x, y = Swap2(x, y)
fmt.Println("x,y = ", x, ",", y)
x, y = Swap3(x, y)
fmt.Println("x,y = ", x, ",", y)
}
/*
足し算関数
*/
func Add1(x int, y int) int { //足し算関数
return x + y
}
func Add2(x, y int) int { //引数の型が同じなら,こんな感じで省略できる
return x + y
}
func Add3(x, y int) (ret int) { // 戻り値を変数として宣言できる
ret = x + y
return
}
/*
入れ替え関数
*/
func Swap1(x int, y int) (int, int) { //引数x,yの入れ替え関数
return y, x
}
func Swap2(x, y int) (int, int) { //引数の型が同じなら,こんな感じで省略できる
return y, x
}
func Swap3(x int, y int) (ret1, ret2 int) { // 戻り値を変数として宣言できる
ret1 = y
ret2 = x
return
}
足し算関数
main関数の中身は,
/*
戻り値が1つの関数
*/
var ret int // 整数型の変数を宣言
ret = Add1(1, 2)
fmt.Println("ret = ", ret)
ret = Add2(1, 2)
fmt.Println("ret = ", ret)
ret = Add3(1, 2)
fmt.Println("ret = ", ret)
こんな感じで,Add1,Add2,Add3という名前の関数が呼び出されています.名前からわかるように,各関数は,二つの引数(ここでは,1と2)を足した結果を戻り値として返します.
つまり,
戻り値 = 関数名(引数1,引数2,...)
という構文です.(まー,他の言語と変わらないですね!)
次に,関数の定義部分を見ていきましょう('ω')
/*
足し算関数
*/
func Add1(x int, y int) int { //足し算関数
return x + y
}
func Add2(x, y int) int { //引数の型が同じなら,こんな感じで省略できる
return x + y
}
func Add3(x, y int) (ret int) { // 戻り値を変数として宣言できる
ret = x + y
return
}
Add1を見ると,「func」のあとに関数名「Add1」が来て,
引数部分「(x int , y int)」となり,
なんとなんと,
戻り値の型「int」が最後に来ます!
Go言語,独特の書き方ですねぇ~(^^)
Add2は,引数部分が
「(x, y int)」
のように省略できることを教えてくれます!
Add3は,戻り値の部分が
「(ret int)」
のように書けます!と教えてくれてます!
ここで,宣言したretに格納されている値が,戻り値として返されます!
入れ替え関数
main関数の中身は,
/*
戻り値が複数の関数
*/
x, y := Swap1(1, 2)
fmt.Println("x,y = ", x, ",", y)
x, y = Swap2(x, y)
fmt.Println("x,y = ", x, ",", y)
x, y = Swap3(x, y)
fmt.Println("x,y = ", x, ",", y)
こんな感じで,Swap1,Swap2,Swap3という名前の関数が呼び出されています.名前からわかるように,各関数は,二つの引数の順序を入れ替えて,戻り値として返します.
C言語とは違い,複数の戻り値を返すことができるんです(*´ω`*)
次に,関数の定義部分は下記の通りです.
/*
入れ替え関数
*/
func Swap1(x int, y int) (int, int) { //引数x,yの入れ替え関数
return y, x
}
func Swap2(x, y int) (int, int) { //引数の型が同じなら,こんな感じで省略できる
return y, x
}
func Swap3(x int, y int) (ret1, ret2 int) { // 戻り値を変数として宣言できる
ret1 = y
ret2 = x
return
}
Add関数の説明と同じく,Swap2は引数部分の型の省略,Swap3は,戻り値に変数を宣言しています.
まとめ
どうでしたか?
Goの関数がどんな感じか理解できたでしょうか?
他のプログラミング言語と違い,複数の戻り値を返せるなんて,直観的でわかり易いですよね?
自分が初めてプログラミング言語(C言語)を学習していた時,
「なんで,戻り値は一つだけなんだよッ!(; ・`д・´)」って感じで,泣く泣くポインタの勉強をしたのを覚えていますw
おまけ(The Go Playground)
ちなみに,説明用に記載したコード全文をGoの公式Webサイト
The Go Playground : https://play.golang.org/
にコピー&ペーストして,サイト内の「Run」を実行すれば,
Goの実行環境がなくても
実行結果が出力されます!(Google先生すげー)
それでは,無料の皆さんは,次回で会いましょう('ω')ノ
サポートお願いいたします.主に初心者から中級向けに,ソフトウェア開発に関する知識を提供していきます.