Dev Study
← 解説「トレイトの定義と実装」に戻る

サンプルコードで身につける: トレイトの定義と実装

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1最小のトレイト定義と実装

メソッド1つだけのトレイトを定義し、1つの型に実装する最小構成です。trait 側にはシグネチャ(約束)だけを書き、impl Trait for 型 側に中身を書く、という役割分担をまず押さえてください。実装した瞬間からドット記法で呼べるようになります。

Rust

2違う形の型に同じ操作をそろえる

正方形と三角形はフィールド構成が違いますが、「面積を返す」という操作は Area トレイトで共通の口になります。各 impl が自分のフィールドを使って計算する、という分担に注目してください。図形に限らず、「データ構造は違うが同じ問いに答えられる」型をそろえるのがトレイトの本領です。

Rust

3デフォルト実装 — 共通の振る舞いを用意する

トレイトのメソッドには本体(デフォルト実装)を書いておけます。impl 側は何も書かなければデフォルトをそのまま使い、独自の挙動が必要な型だけ上書きします。ログ出力のように「大半の型は共通でよく、一部だけ特別」という場面で実装の重複をなくせます。

Rust

4デフォルト実装から必須メソッドを呼ぶ

デフォルト実装の中から、まだ実装されていない必須メソッドを呼び出せます。実装側は name を1つ書くだけで、それを利用する introduce が自動で手に入ります。「個別の部分だけ実装させ、組み立ては共通化する」という、実務のトレイト設計でよく使うパターンです。

Rust

5ドメインの型に共通の「要約」を実装する

記事とコメントという業務上の型に、Summary トレイトで「一覧表示用の要約を返す」操作をそろえた例です。各型が自分のフィールドから要約を組み立てるので、表示側は summary を呼ぶだけで済みます。通知文の生成やログ整形など、実務で型をまたぐ共通操作はこの形に落ち着きます。

Rust