「Go/関数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎順列・組合わせ: 生成順序を修正
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
82 行
Goの関数では可変長仮引数がサポ-トされています。
 
;[https://paizaplay.iogolang.org/projectsp/Uth1bYAZKeOdZm0wV_CiNg?language=goHOwkE1x1WsG コード例]:<syntaxhighlight lang="go" highlight="5,149,13-15" line>
package main
 
import "fmt"
 
func sum(s ...int) (n int) {
n := 0
for _, v := range s {
n += v
}
return n
}
 
105 ⟶ 104行目:
511
</syntaxhighlight>
;解説:可変仮引数を受取る関数の定義:<syntaxhighlight lang="go" start=5 highlight="1,5" line>
func sum(s ...int) (n int) {
for _, v := range s {
n :+= 0v
}
return
}
</syntaxhighlight>
:任意個のintの仮引数を受け取り、intを返す関数を定数しています。
:戻値には n という名前を与えており、n の初期値はintのゼロ値の 0 になります。
:尚、9行目の {{code|return}} は冗長に見えますが、戻値に名前をつけた場合必須です。
;解説:可変仮引数の関数の呼出し:<syntaxhighlight lang="go" start=12 highlight="2-4" line>
func main() {
fmt.Println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
v := []int{1, 2, 4, 8, 16, 32, 64, 128, 256}
fmt.Println(sum(v...))
}
</syntaxhighlight>
:可変仮引数の関数の呼出しは、実引数の数が可変であることを除けば、通常の関数とかわりありません。
:この例では、たまたま等差であったり法則がありますが、もちろん値は任意です。
:15行目の <syntaxhighlight inline> fmt.Println(sum(v...)) </syntaxhighlight> は、スライスを実引数に展開する構文です。
::[[JavaScript]]の[[JavaScript/配列#スプレッド構文|スプレッド構文]]と似ていますが、Goでは {{code|...}} はスライスに後置するところが違います。
:Goではキーワードや区切子を最初にするため、同じ区切子が文脈によって意味を変えますが {{code|...}} は上の例のほか、配列定義 <syntaxhighlight inline> ary := [...]int{2,3,5,7,11} </syntaxhighlight> でも使われます。
 
{{See also|[[../式#仮引数に ... パラメーターを渡す|式#仮引数に ... パラメーターを渡す]]}}
 
== 多値 ==