Empty¶
概要¶
コード中に内容のないブロック等が存在しない際に獲得できる実績です. プログラムの流れに影響しないこれらの要素を削除することによって,コード行数が削減でき,可読性が上がります.
| タイトル |
|---|
| Empty sack cannot stand upright |
この実績には,以下の8つのルールが含まれます:
- EmptyCatchBlock
- EmptyFinallyBlock
- EmptyIfStmt
- EmptyStatementBlock
- EmptyStatementNotInLoop
- EmptySwitchStatements
- EmptyTryBlock
- EmptyWhileStmt
EmptyCatchBlock¶
空の catch ブロックを記述すると例外を捕まえることはできますが,それに対する処理が適切に行われません.
例外処理を適切に行うために,空の empty ブロックを記述することは避けましょう.
コード例¶
public void doSomething() {
try {
FileInputStream fis = new FileInputStream("/tmp/bugger");
} catch (IOException ioe) {
// !!! 適切な例外処理を行いましょう
}
}
このルールのチェックには,PMDの EmptyCatchBlock を用いています.
EmptyFinallyBlock¶
空の finally ブロックを記述することは避けましょう.
コード例¶
public class Foo {
public void bar() {
try {
int x=2;
} finally {
// !!! 空の finally ブロックです.
}
}
}
このルールのチェックには,PMDの EmptyFinallyBlock を用いています.
EmptyIfStmt¶
空の if 文を記述することは避けましょう.
コード例¶
public class Foo {
void bar(int x) {
if (x == 0) {
// !!! 空の if 文です.
}
}
}
このルールのチェックには,PMDの EmptyIfStmt を用いています.
EmptyStatementBlock¶
空の宣言ブロックを記述することは避けましょう.
コード例¶
public class Foo {
private int _bar;
public void setBar(int bar) {
{ _bar = bar; } // この使い方は適切です
{} // !!! 必要ありません
}
}
このルールのチェックには,PMDの EmptyStatementBlock を用いています.
EmptyStatementNotInLoop¶
for ループや while ループの条件文以外で使われている空の宣言文(セミコロン(;)だけ)は必要ありません.
セミコロンが2つ連なっているものも取り除きましょう.
コード例¶
public void foo() {
// !!! 必要のないセミコロンです
;
// !!! 文の末尾にセミコロンは2つ以上必要ありません
System.out.println("look at the extra semicolon");;
}
このルールのチェックには,PMDの EmptyStatementNotInLoop を用いています.
EmptySwitchStatements¶
空の switch ブロックを記述することは避けましょう.
コード例¶
public void bar() {
int x = 2;
switch (x) {
// !!! 空の switch ブロックです.
}
}
このルールのチェックには,PMDの EmptySwitchStatements を用いています.
EmptyTryBlock¶
空の empty ブロックを記述することは避けましょう.
コード例¶
public class Foo {
public void bar() {
try {
// !!! 空の try ブロックです.
} catch (Exception e) {
e.printStackTrace();
}
}
}
このルールのチェックには,PMDの EmptyTryBlock を用いています.
EmptyWhileStmt¶
空の while 文を記述することは避けましょう.
コード例¶
void bar(int a, int b) {
while (a == b) {
// !!! 空の while 文です.
}
}
このルールのチェックには,PMDの EmptyWhileStmt を用いています.
ちなみに
処理を一定時間中断するための無限ループ(Timing loop)を記述したい場合は, Thread.sleep() を使うのが適切です.