🐣
Go言語の可変個引数関数なるものを使う
Go by Example: Variadic Functions
公式を翻訳しております
可変個引数関数は、末尾にいくつでも引数を付けて呼び出すことができる。例えば、fmt.Printlnは一般的なバリアディック関数です。
ここに、任意の数のintを引数として受け取る関数がある。
関数内では、numsの型は[]intと等価である。len(nums)を呼び出したり、rangeで反復処理したりすることができる。
可変個引数関数は、個々の引数を用いて通常の方法で呼び出すことができる。
スライスの中にすでに複数の引数がある場合は、次のようにfunc(slice...)を使ってそれらをバリアディック関数に適用する。
囲碁における関数のもうひとつの重要な点は、クロージャを形成する能力である。
package main
import "fmt"
// nums ...intとは、任意の数のintを受け取ることを意味します。
func sum(nums ...int) {
// fmt.Printは、引数に渡された文字列を表示します。
fmt.Print(nums, " ")
total := 0
// rangeは、スライスやマップを1つずつ反復処理するために使います。
// _は、インデックスを無視するために使います。
for _, num := range nums {
// total += numは、total = total + numと同じです。
total += num
}
// fmt.Printlnは、引数に渡された文字列を表示し、最後に改行を追加します。
fmt.Println(total)
}
func main() {
sum(1, 2)// 1 2 3
sum(1, 2, 3)// 1 2 3 6
// nums := []intは、intのスライスを作成します。
nums := []int{1, 2, 3, 4}
// スライスを渡す場合は、スライスの末尾に...を付けます。
sum(nums...)// 1 2 3 4 10
}
実行結果
hashimotojunichi@hashimotojunichinoMacBook-Pro go-example % go run hello.go
[1 2] 3
[1 2 3] 6
[1 2 3 4] 10
まとめ
Goのスライスという配列のようなものを使って、for文を使い反復処理をやってみました。
...は、今回使った可変長引数というものでした。シンプルなんですけど、理解するまでは、混乱しちゃいますね。
Discussion