Javaプログラミング・品質向上ガイド:改善テクニックと徹底チェックリス

Javaプログラミング品質向上:完全ガイドライン&チェックリスト

保守性の高いJavaコードを書くための改善テクニックと、セルフレビューに使えるチェックリストを網羅しました。



1. 変数と型(設計とルール)


● 変数名に型の情報を含めない

静的型付け言語であるJavaでは、変数名から型を排除し、意味に集中します。

// Bad: String strName, int intCount
// Good: String name, int count

● マジックナンバーには名前をつける

生の数字は意味不明な「マジック」になります。定数で意味を定義しましょう。

// Bad: if (status == 1)
// Good: 
public static final int STATUS_ACTIVE = 1;
if (status == STATUS_ACTIVE) { ... }

● スコープの最小化と再利用の禁止

変数は使う直前で宣言し、別の目的で使い回さないようにします。

// Good: 
for (User user : users) { ... }
// 別の目的の計算は、新しい変数で行う
double totalPrice = items.stream().mapToDouble(Item::getPrice).sum();


2. 制御構造(分岐・繰り返し)


● ガード句によるネストの回避

正常ケースをifの主ルート(ネストの外側)に置くため、異常系を先にreturnさせます。

// Good: 
if (input == null) return;
if (input.isEmpty()) return;
// ここからメインロジック(ネストが浅い)

● 添え字ループではなくイテレーション

添え字(i)の管理ミスによるバグを物理的に防ぎます。

// Good: 
for (String element : list) {
    process(element);
}

● switch-caseでのdefault処理

default節は「例外的なケース」を捕捉するために利用し、意図しない値への対策を徹底します。

switch (type) {
    case A -> processA();
    default -> throw new IllegalArgumentException("不正な種別です: " + type);
}


3. クラス・メソッド・設計


● メソッドの分割と引数のオブジェクト化

引数が多すぎる(目安4つ以上)場合は、引数自体をオブジェクト(Dto)にまとめます。

// Good: 
public void registerUser(UserRegistrationRequest request) { ... }

● 属性・メソッドが多すぎるクラスの分割

「単一責任の原則」に基づき、責務が多すぎる場合はクラス自体を分割することを検討します。


4. 演算・配列・安全性


● ゼロ除算の考慮と型変換の明示

// Good: 
if (count != 0) {
    double average = (double) sum / count; // 明示的なキャスト
}

● 配列の境界チェック

配列サイズを超えたアクセスを避けるため、ロジックを慎重に設計します。


5. スタイル・コメント・IO


● try-with-resourcesによる確実なクローズ

try (var stream = Files.lines(path)) {
    stream.forEach(System.out::println);
} catch (IOException e) {
    logger.error("ファイルの処理に失敗", e);
}

● コードの意図をコメントにする

「何をしているか」はコードが語ります。コメントは「なぜこの方法を選んだか」という意図を書きます。

6. 総合チェックリスト(最終確認用)

【変数】




【制御構造】




【設計】




0 件のコメント:

コメントを投稿

【Java】Maven×H2で作る「消える」データベース環境:macOS Sequoiaでの検証ガイド

 Java開発において、データベース(DB)操作の習得は必須です。今回は Maven を使用してプロジェクトを構築し、アプリ終了と共にデータが消える H2インメモリデータベース を、Javaプログラムから制御する手順を解説します。 1. 開発環境(Mac) 今回の検証は以下の最新...