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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
98 行
55
511
</syntaxhighlight>
 
== 多値 ==
Goの関数は2つ以上の戻値を同時に返せます。
 
;[https://paiza.io/projects/EP5Sbr6l3BB3eC8hDXM_CA?language=go コード例]:<syntaxhighlight lang="go" highlight="5,19,21,23,25,27,29"line>
package main
 
import "fmt"
 
func signabs(n int) (int, int) {
switch {
case n < 0:
return -1, -n
case n > 0:
return 1, n
case n == 0:
return 0, 0
default:
panic("what to do")
}
}
 
func main() {
s, n := signabs(123)
fmt.Println("signabs(123)", s, n)
s, n = signabs(-321)
fmt.Println("signabs(-321)", s, n)
s, n = signabs(0)
fmt.Println("signabs(0)", s, n)
s, _ = signabs(99)
fmt.Println("s, _ = signabs(99):s", s)
_, n = signabs(-134567)
fmt.Println("_, n = signabs(-134567):n", n)
fmt.Println(signabs(-12))
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
signabs(123) 1 123
signabs(-321) -1 321
signabs(0) 0 0
s, _ = signabs(99):s 1
_, n = signabs(-134567):n 134567
-1 12
</syntaxhighlight>
 
== 多値で返す関数を関数の実引数にする ==
Goの関数は、多値で返す関数を別の関数のの実引数に出来ます。
 
 
;[https://paiza.io/projects/0JJlzmxQNZnZ7-XO-WeVww?language=go 多値で返す関数を関数の実引数にする例]:<syntaxhighlight lang="go" highlight="8,20,25,26"line>
package main
 
import (
"fmt"
"math" // For math.MaxInt64 and math.MinInt64
)
 
func minmax(s ...int) (int, int) {
min, max := math.MaxInt64, math.MinInt64
for _, v := range s {
if v < min {
min = v
} else if v > max {
max = v
}
}
return min, max
}
 
func diff(m, n int) int {
return n - m
}
 
func main() {
fmt.Println(minmax(3, 12, 4, 67, 99, -12))
fmt.Println(diff(minmax(3, 12, 4, 67, 99, -12)))
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
-12 99
111
</syntaxhighlight>