第11章: トレイト - 演習
演習1: 基本的なトレイトの実装
Describableトレイトを定義し、複数の型に実装してください。
// TODO: Describableトレイトを定義
// describe(&self) -> String メソッドを持つ
struct Book {
title: String,
author: String,
}
struct Movie {
title: String,
director: String,
year: u32,
}
// TODO: BookとMovieにDescribableを実装
fn main() {
let book = Book {
title: String::from("Rust本"),
author: String::from("Alice"),
};
let movie = Movie {
title: String::from("映画タイトル"),
director: String::from("Bob"),
year: 2024,
};
println!("{}", book.describe());
println!("{}", movie.describe());
}
演習2: トレイト境界を使った関数
Printableトレイトを実装した型のみを受け入れる関数を作成してください。
trait Printable {
fn format(&self) -> String;
}
// TODO: Printableを実装した型のベクタを受け取り、
// すべての要素をformat()して表示する関数 print_all を作成
fn main() {
// テスト用のコード
}
演習3: 標準トレイトの活用
#[derive]を使って、Debug、Clone、PartialEqを自動実装してください。
// TODO: 必要なderiveを追加
struct Student {
name: String,
grade: u32,
gpa: f64,
}
fn main() {
let s1 = Student {
name: String::from("Alice"),
grade: 3,
gpa: 3.8,
};
// Debug出力
println!("{:?}", s1);
// Clone
let s2 = s1.clone();
// PartialEq比較
println!("同じ学生: {}", s1 == s2);
}
発展課題
独自のトレイトを定義し、デフォルト実装を活用してコードの再利用性を高めてください。