April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
関数やメソッドを実装するとき、必要に応じてパラメーターを増減させて、柔軟なロジックを実装したいことがあります。Goの文法に可変長引数はありますが、引数の数は変更できても、それぞれの型は同一である必要があります。パラメーターの型にバリエーションがある場合は別の方法が必要です。 Goには、Pythonのようなキーワード引数といったオプション引数のための文法はありませんし、JavaやC++のような関数オーバーロードもありません。ですが、いくつかの標準ライブラリや人気のライブラリで使われている技法があります。
ここではうどん屋のオプションを題材に、Goで関数のオプション引数を実現する方法を紹介します。次のような、すべてのパラメーターを渡さなければならない関数があるとして、これをいかに使いやすいものにできるかが、本節のゴールです。
type Portion int
const (
Regular Portion = iota // 普通
Small // 小盛り
Large // 大盛り
)
type Udon struct {
men Portion
aburaage bool
ebiten uint
}
// 麺の量、油揚げ、海老天の有無でインスタンス作成
func NewUdon(p Portion, aburaage bool, ebiten uint) *Udon {
return &Udon{
men: p,
aburaage: aburaage,
ebiten: ebiten,
}
}
// 海老天2本入りの大盛り
var tempuraUdon = NewUdon(Large, false, 2)
Read now
Unlock full access