Java | インクリメント/デクリメントを安全に使うためのリファクタリング例(悪いコード → 良いコード)

Java Java
スポンサーリンク

インクリメント/デクリメントのリファクタリング例

では「悪いコード → 良いコード」のリファクタリング例を紹介します。実務でありがちな“インクリメント/デクリメントの危険な使い方”を、安全で読みやすい形に直していきましょう。


例1: 複雑な式に埋め込む

悪いコード(読みにくい・バグの温床)

int a = 2;
int b = a++ + ++a + a--;
Java
  • どのタイミングで増減するか分かりづらい
  • レビューで「意図が分からない」と指摘されやすい

良いコード(安全で明確)

int a = 2;
a++;
int temp1 = a;   // 先に増やした値を使う
int temp2 = a;   // そのまま使う
a--;
int b = temp1 + temp2 + a;
Java

👉 意図が一目で分かる
👉 実務では「一行で書ける」より「誰でも理解できる」が大事。


例2: 条件式にインクリメントを入れる

悪いコード

int i = 0;
while (i++ < arr.length) {
    System.out.println(arr[i]);
}
Java
  • i++ の評価タイミングで混乱しやすい
  • 最後に ArrayIndexOutOfBoundsException が出る可能性

良いコード

int i = 0;
while (i < arr.length) {
    System.out.println(arr[i]);
    i++;
}
Java

👉 条件とインクリメントを分けることで安全。


例3: 配列アクセスでの混乱

悪いコード

int[] arr = {10, 20, 30};
int i = 0;
System.out.println(arr[++i]); // 最初の要素が飛ぶ
Java

良いコード

int[] arr = {10, 20, 30};
int i = 0;
System.out.println(arr[i]); // まず使う
i++;
Java

👉 「今の要素を使う」か「次の要素を使う」かを明確に分ける


例4: 無限ループの原因

悪いコード

int i = 0;
while (i < 5) {
    System.out.println(i);
    // i++ を忘れて無限ループ
}
Java

良いコード

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
Java

👉 for文にまとめるとインクリメント忘れを防げる


ベストプラクティスまとめ

  • 複雑な式に埋め込まない
  • 条件式に直接書かない
  • 配列アクセスは意図を明確に
  • ループは for文で書くと安全
  • 「動くコード」より「読みやすいコード」を優先

💡 実務では「インクリメントをどう書くか」よりも「後から読んだ人が迷わないか」が最重要です。

タイトルとURLをコピーしました