Unused / Useless / Unnecessary¶
概要¶
コード中に使用していない要素や不必要な要素が存在しない際に獲得できる実績です. プログラムの流れに影響しないこれらの要素を削除することによって,コード行数が削減でき,可読性が上がるほか,バグの温床となることを防ぎます.
| タイトル |
|---|
| Beating the air |
この実績には,以下の8つのルールが含まれます:
- UnnecessaryLocalBeforeReturn
- UnnecessaryReturn
- UnusedFormalParameter
- UnusedImports
- UnusedLocalVariable
- UnusedPrivateField
- UnusedPrivateMethod
- UselessParentheses
UnnecessaryLocalBeforeReturn¶
return 文の直前で不必要なローカル変数を宣言することは避けましょう.
コード例¶
public class Foo {
public int foo() {
int x = doSomething();
return x; // !!! 'return doSomething();' で十分です.
}
}
このルールのチェックには,PMDの UnnecessaryLocalBeforeReturn を用いています.
UnnecessaryReturn¶
不必要な return 文を記述することは避けましょう.
コード例¶
public class Foo {
public void bar() {
int x = 42;
return; // !!! この 'return;' は必要ありません.
}
}
このルールのチェックには,PMDの UnnecessaryReturn を用いています.
UnusedFormalParameter¶
メソッドやコンストラクタに不必要なパラメータを渡すことは避けましょう.
コード例¶
public class Foo {
private void bar(String hoge) {
doSomething();
return;
// !!! hoge は使われていません
}
}
このルールのチェックには,PMDの UnusedFormalParameter を用いています.
UnusedImports¶
不必要なインポート文を記述することは避けましょう.
コード例¶
import java.io.File; // !!! File クラスが必要ない場合は削除しましょう
public class Foo {
private void bar() {
doSomething();
return;
}
}
このルールのチェックには,PMDの UnusedImports を用いています.
UnusedLocalVariable¶
不必要なローカル変数を宣言したり,代入したりすることは避けましょう.
コード例¶
public class Foo {
public void bar() {
int i = 5; // !!! i は使用されていません.削除しましょう.
doSomething();
return
}
}
このルールのチェックには,PMDの UnusedLocalVariable を用いています.
UnusedPrivateField¶
不必要なプライベート変数(メンバ変数)を宣言したり,代入したりすることは避けましょう.
コード例¶
public class Something {
private static int FOO = 2; // !!! FOO は使用されていません.削除しましょう.
private int i = 5; // !!! i は使用されていません.削除しましょう.
private int j = 6;
public int addOne() {
return j++;
}
}
このルールのチェックには,PMDの UnusedPrivateField を用いています.
UnusedPrivateMethod¶
不必要なプライベートメソッドを宣言することは避けましょう.
コード例¶
public class Something {
private void foo() {} // !!! foo は使用されていません.削除しましょう.
}
このルールのチェックには,PMDの UnusedPrivateMethod を用いています.
ちなみに
この実績では プライベート変数,プライベートメソッド,ローカル変数,メンバ変数 など,様々な種類の変数やメソッドについて触れられています.整理してみましょう.
- プライベート{変数, メソッド}:
private宣言されている変数やメソッドのこと.これらの変数やメソッドは同一クラス内からしか参照できない.- ローカル変数:
- メソッド内で宣言され,そのメソッドに属する変数のこと.そのメソッド内だけで使用することができ,別のメソッドに属するローカル変数とは同名であっても別のものになる.
- メンバ変数:
- クラス内で宣言され,そのクラスに属する変数のこと.そのオブジェクトの属性を定義したものとも言える.
クラスに属するため,
private宣言するのが一般的. なお,同じようにクラス内で宣言され,そのクラスに属するメソッドのことを メンバメソッド という.
UselessParentheses¶
不必要な括弧を使用することは避けましょう.
コード例¶
public class Foo {
private int _bar1;
private Integer _bar2;
public void setBar(int n) {
// !!! _bar1 = Integer.valueOf(n) で十分です.
_bar1 = Integer.valueOf((n));
// !!! _bar2 = n で十分です.
_bar2 = (n);
}
}
このルールのチェックには,PMDの UselessParentheses を用いています.
ちなみに
クラスのメンバ変数を宣言する際には,通常のローカル変数とは異なることを示すために,変数の接頭に m_ あるいは _ をつけることがあります.
上記の例では, _bar1 と _bar2 がそれに該当し,メンバ変数であることがわかりやすくなっています.
この記法は ハンガリアン記法 と呼ばれ,変数名やクラス名などに特別な接頭文字ないし接尾文字をつけることで,他の人がそれを見たときにスコープなどが分かるようになります.
一例:
| 文字 | 意味 | 使用例 |
|---|---|---|
| b または f | 論理型 | bDirtyFlag |
| ch | 文字型 | chSeparator |
| n または i | 整数型 | nPower |
| fp または f | 単精度浮動小数点型 | fpPrice |
| db または d | 倍精度浮動小数点型 | dPi |
| p または lp | ポインタ型 | lpDirectSound |
| s | 文字列型 | sPlayerName |
| g_ | グローバル変数 | g_iErrorCode |
| c_ | 定数 | c_nBufferSize |
| s_ | 静的変数 | s_pLookupTable |
| m_ | メンバ変数 | m_nLength |
| C | クラス | CHoge |
参考文献: ハンガリアン記法 - Wikipedia