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点以上
  • 全必須トレイトが正しく実装されていること