mcpField
J
java-python-code-reviewer

java-python-code-reviewer

github.com/yennanliuテスト・品質14077 回インストール今日更新
リポジトリ

java-python-code-reviewer について

アルゴリズム学習者やレビュアー向けの、Java と Python のコードレビュー用スキルです。正確性や計算量、コード品質を確認し、改善案を示します。

主な機能

  1. 01正確性と境界条件の確認
  2. 02時間・空間計算量の分析
  3. 03Java と Python の品質レビュー
  4. 04言語間の実装比較
  5. 05アルゴリズムの最適化案

活用シーン

  1. 01LeetCode 解法のレビュー
  2. 02Java と Python の方針比較
  3. 03境界条件やロジックの誤り発見
  4. 04性能改善点の特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yennanliu/cs_basics --skill java-python-code-reviewer

インストール後、Claude Code で/java-python-code-reviewerを入力して読み込まれたか確認します。

詳細

Java & Python コードレビュアー

このスキルを使用するタイミング

次の場合にこのスキルを使用します:

  • LeetCode の問題の解答をレビューするとき
  • コードの正確性と効率性を確認するとき
  • Java と Python の実装を比較するとき
  • アルゴリズムの実装に関するフィードバックを提供するとき
  • 既存の解決策を最適化するとき

レビューフレームワーク

1. 正確性の分析

確認項目:

  • エッジケースの処理(空の入力、null、単一要素)
  • 境界条件(配列のインデックス、ループの終了条件)
  • アルゴリズムの実装におけるロジックエラー
  • テストケースの網羅性(基本ケース、エッジケース、特殊ケース)

一般的なエッジケース:

  • 空の配列/文字列:[]、""
  • null 入力:null、None
  • 単一要素:[1]、"a"
  • 重複要素:[1,1,1]
  • 負の数:[-1, -5]
  • 大きな入力:実行時間/メモリの制限をテスト
2. 時間計算量と空間計算量

分析および検証する項目:

  • 時間計算量:入力サイズに対する操作回数を数えます
  • 空間計算量:使用する補助領域を数えます
  • 最適な解決策と比較します

提示内容:

Current: O(n²) time, O(1) space
Optimal: O(n) time, O(n) space using HashMap
Trade-off: Use extra space for better time complexity

計算量のリファレンス:

  • O(1):直接アクセス
  • O(log n):二分探索、平衡木
  • O(n):1 回の走査、線形スキャン
  • O(n log n):効率的なソート、分割統治法
  • O(n²):ネストしたループ
  • O(2ⁿ):指数時間(バックトラッキング、総当たり)
3. コード品質 - Java

Java のベストプラクティス:

  • 適切なデータ構造を使用します(ArrayList、HashMap、HashSet)
  • 命名規則に従います(メソッド/変数にはキャメルケースを使用)
  • null チェックと入力検証を行います
  • ジェネリクスを適切に使用します(raw 型ではなく List<Integer> を使用)
  • 実装よりインターフェースを優先します(ArrayList<> ではなく List<> を使用)

指摘すべき Java のアンチパターン:

// Bad: Raw types
ArrayList list = new ArrayList();

// Good: Generics
List<Integer> list = new ArrayList<>();

// Bad: Manual array copying
for (int i = 0; i < arr.length; i++) { ... }

// Good: Built-in methods
Arrays.copyOf(arr, arr.length);

// Bad: String concatenation in loop
String s = "";
for (String str : list) { s += str; }

// Good: StringBuilder
StringBuilder sb = new StringBuilder();
for (String str : list) { sb.append(str); }

確認項目:

  • 整数のオーバーフロー:必要に応じて long を提案します
  • 適切な例外処理
  • メモリリーク(リソースの未クローズ)
  • 該当する場合はスレッドセーフ性
4. コード品質 - Python

Python のベストプラクティス:

  • Python らしい慣用表現を使用します(リスト内包表記、enumerate、zip)
  • PEP 8 のスタイルガイドラインに従います
  • 適切なデータ構造を使用します(set、dict、deque)
  • 組み込み関数を活用します

指摘すべき Python のアンチパターン:

# Bad: Manual index tracking
for i in range(len(arr)):
    print(i, arr[i])

# Good: enumerate
for i, val in enumerate(arr):
    print(i, val)

# Bad: Building list with append in loop
result = []
for x in arr:
    result.append(x * 2)

# Good: List comprehension
result = [x * 2 for x in arr]

# Bad: Multiple membership checks
if x == 'a' or x == 'b' or x == 'c':

# Good: Use set or tuple
if x in {'a', 'b', 'c'}:

確認項目:

  • 適切なコレクションの使用(collections.defaultdict、Counter)
  • メモリ効率を高めるジェネレーター式
  • None チェックの適切な使用
  • 明確さのための型ヒント(任意ですが有用です)
5. アルゴリズムの最適化

次のような改善を提案します:

  • 不要なネストしたループ → HashMap を使って O(n) にします
  • 繰り返しの計算 → メモ化/DP を使います
  • 冗長なソート → ヒープまたはクイックセレクトを使います
  • 複数回の走査 → 1 回の走査にまとめます
  • 余分な領域の使用 → インプレースで変更します

パターンの認識:

  • Two Sum パターン → HashMap を使います
  • スライディングウィンドウ → 2 つのポインターを使います
  • 部分配列の合計 → 累積和を使います
  • 最長部分文字列 → スライディングウィンドウと HashMap を使います
  • 木の走査 → 適切なデータ構造を使って DFS/BFS を行います
6. 比較:Java と Python

実装を比較するとき:

Java の強み:

  • 明示的な型により、エラーを早期に発見できます
  • パフォーマンスが重要なコードに適しています
  • データ構造の使用方法が明確です

Python の強み:

  • より簡潔で読みやすいです
  • 豊富な標準ライブラリがあります(collections、itertools)
  • 迅速なプロトタイピングに適しています

次のような不整合を指摘します:

  • 使用しているアルゴリズムが異なる(同じアプローチにすべきです)
  • 時間計算量または空間計算量が異なる
  • 一方のバージョンでエッジケースの処理が欠けている
7. レビュー出力形式

レビューは次の形式で構成します:

## Correctness: ✓ Pass / ⚠ Issues Found

[List any correctness issues]

## Complexity Analysis

- Time: O(?) - [Explain]
- Space: O(?) - [Explain]
- Optimal: [If current solution is not optimal]

## Code Quality

**Strengths:**
- [List positive aspects]

**Issues:**
- [Issue 1] at line X: [Explanation]
- [Issue 2] at line Y: [Explanation]

**Suggestions:**
- [Suggestion 1]: [Why it's better]
- [Suggestion 2]: [Why it's better]

## Overall Assessment

[Summary and recommendation]

レビューチェックリスト

レビューを完了する前に確認します:

  • エッジケースでテストした
  • 時間計算量を検証した
  • 空間計算量を検証した
  • よくあるバグがないか確認した
  • 最適な解決策と比較した
  • 具体的な改善案を提案した
  • 提案に対するコード例を示した

レビュー例

例 1:Two Sum
// Code under review
public int[] twoSum(int[] nums, int target) {
    for (int i = 0; i < nums.length; i++) {
        for (int j = i + 1; j < nums.length; j++) {
            if (nums[i] + nums[j] == target) {
                return new int[]{i, j};
            }
        }
    }
    return new int[]{};
}

レビュー:

  • 正確性:✓ 正しく動作します
  • 時間:O(n²) - O(n) に最適化できます
  • 提案:確認済みの数値とそのインデックスを HashMap に保存します

最適化後:

public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[]{map.get(complement), i};
        }
        map.put(nums[i], i);
    }
    return new int[]{};
}

プロジェクトのコンテキスト

  • leetcode_java/ と leetcode_python/ の解法を確認します
  • 言語間で実装を比較します
  • algorithm/ と data_structure/ のパターンと照らし合わせます
  • 分析には doc/ の計算量チャートを参照します

コメント