ジェネリクス
ジェネリクスとは、型と関数の機能をより汎用的に使えるようにするための機能です。これはあらゆる局面でコードの重複を避けるために非常に役立ちますが、多少構文が複雑になります。すなわち、ジェネリック型を使いこなすには、どのようなジェネリック型がきちんと機能するかに細心の注意を払う必要があります。 最もシンプルで一般的なジェネリクスの利用法は型パラメータです。
ジェネリック型の型パラメータにはかぎ括弧(angle brackets
)とアッパーキャメルケース(camel case
)が使われます。: <Aaa, Bbb, ...>
ジェネリックな型パラメータはたいていの場合<T>
で示されます。Rustの場合、「ジェネリクス」には「1つ以上のジェネリックな型パラメータ<T>
を受け付けるもの」という意味もあります。ジェネリックな型パラメータを指定された場合、それは必ずジェネリック型になり、そうでなければ必ず非ジェネリック型、すなわち具象型(concrete
)になります。
例として、あらゆる型の引数T
をとる ジェネリック関数 foo
を定義すると:
fn foo<T>(arg: T) { ... }
となります。T
はジェネリックな型パラメータに指定されているので、この場所で(arg: T)
のように使用するとジェネリック型として扱われます。これはT
という構造体がそれ以前に定義されていても同様です。
では、手を動かしながらジェネリック型の構文を体験していきましょう。