rust-traits - 評価
評価スケール
基本評価 (100点満点)
| 項目 |
配点 |
評価基準 |
| コンパイル |
10点 |
`cargo build` でエラーなし |
| カスタムトレイト |
25点 |
正しい定義と実装 |
| ジェネリクス |
25点 |
トレイト境界の活用 |
| 標準トレイト |
25点 |
Display, Debug, From等 |
| テスト |
10点 |
包括的なテストケース |
| コード品質 |
5点 |
命名、構造 |
ボーナス評価 (最大30点)
| 項目 |
配点 |
| トレイトオブジェクト |
10点 |
| マーカートレイト |
10点 |
| 高度なトレイト |
10点 |
課題の目的
学習目標
- インターフェースとしてのトレイト
- 実装の分離 - 型パラメータ
- トレイト境界
- 単相化 - 一般的なトレイトの実装
- エコシステムとの互換性習得スキル
- 抽象化と再利用
- 型安全なポリモーフィズム
- API設計のベストプラクティス
評価手順
1. トレイト定義のテスト
#[test]
fn test_document_trait() {
struct TestDoc;
impl Document for TestDoc {
fn title(&self) -> &str { "Test" }
fn content(&self) -> &str { "Content" }
}
let doc = TestDoc;
assert_eq!(doc.title(), "Test");
assert!(doc.summary().contains("Test"));
}
2. ジェネリクスのテスト
#[test]
fn test_generic_process() {
let article = Article::new("T", "A", "B");
let result = process(article.clone());
assert!(!result.is_empty());
}
#[test]
fn test_merge() {
let a = Article::new("A", "X", "Content A");
let b = Article::new("B", "Y", "Content B");
let merged = merge(a, b);
assert!(merged.contains("A"));
assert!(merged.contains("B"));
}
3. 標準トレイトのテスト
#[test]
fn test_display() {
let article = Article::new("Title", "Author", "Body");
let display = format!("{}", article);
assert!(display.contains("Title"));
}
#[test]
fn test_from() {
let article: Article = "Quick note".into();
assert!(!article.title.is_empty());
}
減点対象
| 項目 |
減点 |
| トレイト未実装 |
-10点/件 |
| 不適切な境界 |
-5点/件 |
| clippy警告 |
-3点/件 |
合格基準
マンダトリーパート: 80点以上
全必須トレイトが正しく実装されていること