🐣

Go言語の可変個引数関数なるものを使う

2023/07/13に公開

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文を使い反復処理をやってみました。
...は、今回使った可変長引数というものでした。シンプルなんですけど、理解するまでは、混乱しちゃいますね。

Jboy王国メディア

Discussion