お疲れ様です。
はるさらと申します。
Javaを学び始めたばかりの頃、
意識せずに冗長なコードを書いてしまうことは
よくあります。
コードは「動けばいい」だけではなく、
「読みやすさ」や「メンテナンス性」も
とても大切です。
この記事では、
ついやってしまいがちな冗長な書き方と、
それを改善したスッキリしたコードを
15個紹介します。
Javaコードを効率的に保つために、
冗長な部分を解消することが非常に重要です。
全て覚えなくても
一度目を通しておけばコーディング時に
『あれ?もう少しスッキリ書けないかな?』
といった目が養われていくため
少しでも参考になれば幸いです。
※インデントが上手く行っていない箇所は
目をつぶっていただけると幸いです。。。
◆条件分岐での冗長な比較
冗長な例
if (flag == true) {
System.out.println(“実行します”);
}
スッキリ改善
if (flag) {
System.out.println(“実行します”);
}
解説
boolean型はそのまま評価できます。
== trueは不要です。
◆同じ処理を複数回書く
冗長な例
if (score >= 60) {
System.out.println(“合格”);
} else {
System.out.println(“不合格”);
}
スッキリ改善
System.out.println(score >= 60 ? “合格” : “不合格”);
解説
三項演算子を使うことで簡潔になります。
◆不要なインスタンスの生成
冗長な例
String str = new String(“こんにちは”);
スッキリ改善
String str = “こんにちは”;
解説
文字列はリテラルで代入できます。newは不要です。
◆無意味な初期化
冗長な例
int count = 0;
count = items.size();
スッキリ改善
int count = items.size();
解説
一時的な初期化は省いて構いません。
◆無駄なforループの使用
冗長な例
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
スッキリ改善
for (String item : list) {
System.out.println(item);
}
解説
拡張for文(for-each)を使いましょう。
◆nullチェックの冗長な書き方
冗長な例
if (str != null && !str.equals(“”)) {
System.out.println(str);
}
スッキリ改善
if (str != null && !str.isEmpty()) {
System.out.println(str);
}
解説
空文字チェックにはisEmpty()を使いましょう。
◆長すぎるif-else文
冗長な例
if (type == 1) {
System.out.println(“小学生”);
} else if (type == 2) {
System.out.println(“中学生”);
} else if (type == 3) {
System.out.println(“高校生”);
} else {
System.out.println(“不明”);
}
スッキリ改善
switch (type) {
case 1 -> System.out.println(“小学生”);
case 2 -> System.out.println(“中学生”);
case 3 -> System.out.println(“高校生”);
default -> System.out.println(“不明”);
}
解説
Java 14以降ならアロー構文でシンプルに書けます。
◆無駄な変数の使用
冗長な例
int total = price * quantity;
System.out.println(total);
スッキリ改善
System.out.println(price * quantity);
解説
再利用しないなら、直接処理に入れましょう。
◆try-catchでの空のcatchブロック
冗長な例
try {
Files.readAllBytes(Paths.get(“sample.txt”));
} catch (IOException e) {
}
スッキリ改善
try {
Files.readAllBytes(Paths.get(“sample.txt”));
} catch (IOException e) {
e.printStackTrace();
}
解説
空のcatchはNG。最低限のログ出力は必要です。
◆不要なラッパークラスの使用
冗長な例
Integer a = Integer.valueOf(10);
int b = a.intValue();
スッキリ改善
int b = 10;
解説
ボクシング・アンボクシングが不要な場合は基本型でOK。
◆不要なtoStringの呼び出し
冗長な例
System.out.println(str.toString());
スッキリ改善
System.out.println(str);
解説
printlnは自動的にtoString()を呼びます。
◆booleanの返却での冗長なif文
冗長な例
if (age >= 20) {
return true;
} else {
return false;
}
スッキリ改善
return age >= 20;
解説
比較の結果をそのまま返しましょう。
◆サイズチェックでの冗長な書き方
冗長な例
if (list.size() != 0) {
// 実行処理
}
スッキリ改善
if (!list.isEmpty()) {
// 実行処理
}
解説
isEmpty() を使った方が明快です。
◆コンストラクタでの重複処理
冗長な例
public class User {
private String name;
private int age;
public User() {
this.name = “名無し”;
this.age = 0;
}
public User(String name) {
this.name = name;
this.age = 0;
}
}
スッキリ改善
public class User {
private String name;
private int age;
public User() {
this(“名無し”);
}
public User(String name) {
this.name = name;
this.age = 0;
}
}
解説
共通処理はthis(…)でまとめましょう。
◆リスト初期化時の冗長な型指定
冗長な例
List<String> list = new ArrayList<String>();
スッキリ改善(Java 7以降)
List<String> list = new ArrayList<>();
解説
ダイヤモンド演算子<>で型推論を活用できます。
◆ まとめ
Javaは型が明示的なぶん、
つい冗長なコードを書いてしまいがちです。
しかし、無駄な記述を省くことで、
可読性や保守性は大きく向上します。
今回紹介したような改善ポイントを
少しずつ意識して、
より良いコードを書けるようになっていきましょう!
どなたかのお役に立てれば幸いです。
それではまたー!!