goft - 評価

課題の目的

この課題の主な学習目標:

  • Go言語の基本構文の習得
- 変数宣言、関数定義、制御構造 - rune 型と string 型の違い

  • UTF-8 エンコーディングの理解
- Go における文字列処理の特性 - マルチバイト文字の正しい処理

  • スライスの深い理解
- スライスとバッキングアレイの関係 - キャパシティとレングスの管理

  • テスト駆動開発(TDD)の実践
- テーブル駆動テストの作成 - エッジケースの網羅

評価スケール

項目 配点 説明
Part 1: 文字判定関数 20点 9関数の正確な実装
Part 2: 文字列操作関数 30点 9関数の正確な実装
Part 3: 数値変換関数 15点 2関数の正確な実装
Part 4: メモリ操作関数 20点 5関数の正確な実装
コード品質 15点 可読性、命名規則、ドキュメント
**合計** **100点**
ボーナス +25点 ジェネリクス版、イテレータ

評価ポイント

機能要件チェック

文字判定関数 (各2点)

  • [ ] IsAlpha: ASCII アルファベットを正しく判定
  • [ ] IsDigit: ASCII 数字を正しく判定
  • [ ] IsAlnum: 英数字の組み合わせを正しく判定
  • [ ] IsSpace: 空白文字(スペース、タブ、改行等)を正しく判定
  • [ ] IsPrint: 印字可能文字を正しく判定
  • [ ] IsUpper: 大文字を正しく判定
  • [ ] IsLower: 小文字を正しく判定
  • [ ] ToUpper: 小文字→大文字変換が正確
  • [ ] ToLower: 大文字→小文字変換が正確

文字列操作関数 (各3点)

  • [ ] Strlen: UTF-8 文字列の rune 数を正しくカウント
  • [ ] Strchr: 文字が見つかった場合のインデックス、見つからない場合は -1
  • [ ] Strrchr: 末尾からの検索が正確
  • [ ] Strncmp: 負・0・正の返り値が正確
  • [ ] Strdup: 新しいメモリ領域に複製
  • [ ] Substr: 境界条件を正しく処理
  • [ ] Strjoin: 2つの文字列を正しく結合
  • [ ] Strtrim: 両端から指定文字を削除
  • [ ] Split: 区切り文字で正しく分割

数値変換関数 (各7点)

  • [ ] Atoi: 先頭空白、符号、オーバーフローを正しく処理
  • [ ] Itoa: 負数、ゼロ、最大値を正しく変換

メモリ操作関数 (各4点)

  • [ ] Memset: nil チェック、境界チェック
  • [ ] Memcpy: nil チェック、正確なコピー
  • [ ] Memmove: オーバーラップ時の正確な動作
  • [ ] Memcmp: 比較結果の正確性
  • [ ] Memchr: 検索結果の正確性

非機能要件チェック

コード品質 (15点)

  • [ ] 命名規則 (3点): Go の命名規則に準拠
  • [ ] コメント (3点): 関数ドキュメントが適切
  • [ ] エラーハンドリング (3点): パニックを起こさない
  • [ ] コードフォーマット (3点): gofmt でフォーマット済み
  • [ ] テストコード (3点): テーブル駆動テストを実装
  • よくある減点事項

  • UTF-8 処理の誤り (-5点)
- len(s) をバイト数ではなく文字数として使用 - s[i] で直接 rune にアクセスしようとする

  • nil ポインタ参照 (-3点)
- nil スライスへのアクセス - 境界チェックの欠如

  • 禁止ライブラリの使用 (-全点)
- strings, strconv, unicode の使用 - fmt.Sprintf での数値変換

  • テスト不足 (-5点)
- エッジケースのテスト欠如 - カバレッジ80%未満

  • コードスタイル違反 (-2点)
- gofmt 未適用 - 命名規則違反

合格基準

  • 最低点: 70点以上
  • ボーナス考慮: マンダトリー100点満点の場合のみボーナス加算
  • 必須条件: 全関数がパニックせずに動作すること