ここからはGo言語の関数について扱って行きます。
ここでは関数の宣言について基本的な形を見て行きます。
関数の宣言
Go言語の関数の宣言について見て行きましょう。
関数の宣言は基本的に次のような形で行います。
func 関数名(パラメータ名 型名) 返り値の型名 {
処理
}
funcキーワードで関数を作ります。関数名を設定し、パラメータに型名を指定します。返り値の型名を波括弧{}のブロック処理の前に指定します。
これが関数の宣言の形ですけど、宣言の仕方によって少し変わったり、省略できるものがあったりします。
具体的なコードで見ていきましょう。
package main
import "fmt"
func newdef() {
fmt.Println("新しい関数を定義しました!")
}
func main() {
newdef()
}
新しい関数nefdef()を宣言しています。それをmain()関数から呼び出して実行するという形です。
ここでの関数は、引数を使っていない一番シンプルな形での宣言ですね。
波括弧のブロック処理は文字列を出力するだけの処理です。
実行結果は次のとおり。
新しい関数を定義しました!
これ自体は特に問題ないですね。
今度はパラメータを使った関数を宣言してみます。
package main
import "fmt"
func calc(x int, y int) {
fmt.Println(x + y)
}
func main() {
calc(10, 20)
}
calc()関数を、2つのパラメータをint型で宣言しています。
Println()で、2つのパラメータの足し算を出力する処理です。
main()の中で、calc()を値を入れて呼び出しています。
実行結果は次のようになります。
30
これも特に難しいことはないですね。
では、返り値を返す関数に変更してみましょう。
package main
import "fmt"
func calc(x int, y int) int {
return x + y
}
func main() {
result := calc(10, 20)
fmt.Println(result)
}
さっきとの違いは、波括弧{}の前に返り値の型名を宣言して、returnで処理の値を返しているところです。
main()関数でcalc()を呼び出して変数resultに代入し、それをPrintln()で出力しています。
実行結果は同じです。
次のような形での宣言も見てみましょう。
package main
import "fmt"
func calc(x, y int) (int, int) {
return x + y, x * y
}
func main() {
result1, result2 := calc(10, 20)
fmt.Println(result1, result2)
}
ここではcalc()関数の2つのパラメータの型を一つにまとめて指定しています。returnで2つの処理を定義しているので、返り値の型名を丸括弧()で囲って指定します。
main()関数で呼び出す時に、2つの変数を宣言してまとめて取り出して出力しています。
実行結果はこうなります。
30 200
今度は、返り値の型指定のところを少し変えてみましょう。
package main
import "fmt"
func calc(x int, y int) (result int) {
result = x - y
return result
}
func main() {
result3 := calc(10, 20)
fmt.Println(result3)
}
返り値の型の指定のところに、返り値「result」を合わせて宣言しています。
このcalc()関数の部分は次の書き方と同じです。
func calc(x int, y int) int {
result := x - y
return result
}
こちらは返り値の型の指定のところで返り値の変数を宣言していないので、ブロック処理の中で省略宣言の形で初期化しています。
また、この部分を次のように書くこともできます。
func calc(x int, y int) (result int) {
result = x - y
return
}
ここでは、returnにresultの変数を渡していません。
すでに、関数宣言の中で、型名と共に返り値のresultを定義しているので、returnの値はすでにわかっているということになるため、returnのみで処理できるということになっています。
-10
どの処理でも、結果は同じになります。
Pythonコードで書くと…
では、Pythonでの関数をやってみましょう。
定義としては次の記事になります。
次のようなコードが書けると思います。
def calc(x, y):
return x + y, x * y
def main():
result1, result2 = calc(10, 20)
print(result1, result2)
if __name__ == "__main__":
main()
calc()関数を定義して、main()で呼び出しています。
実行するとこうなります。
30 200
これ自体は特に難しいものでもないですね。
Pythonでも一応、型の指定をして書くこともできます。
calc()関数の部分は次のようになります。
def calc(x: int, y: int) -> (int, int):
return x + y, x * y
ただし、Pythonでの型の指定は注釈のような意味で、コードの内容を理解しやすくするためのもので、型の厳密なチェックを行うようにはなっていないことに注意しましょう。
最後に
ここでは、Go言語の関数の宣言を扱いました。
関数の引数の型の指定や、返り値の型の指定の方法を見て来ました。
基本的な関数宣言の方法は、「func 関数名(パラメータ名 型名) 返り値の型名 {処理}」となります。
処理に応じた指定の方法がいろいろとあることを理解しておきましょう。