第1章_Java言語で学ぶリファクタリング入門
概要
"シンボリック定数によるマジックナンバーの置き換え"の手順
『手順1』シンボリック定数を宣言する
(1)シンボリック定数を宣言する
Javaでシンボリック定数を作るには、
- public static finalのクラスフィールドを使う。
- enumを使う。
public→クラスの外からでも参照できるようにするため。
static→クラスフィールドにするため
final→誤って代入されないようにするため。
※あるクラスの中だけで使われるシンボリック定数を宣言する場合には、
private static finalにすることもある。
(2)マジックナンバーをシンボリック定数で置き換える。
シンボリック定数が出来たので、
ソース中に登場するロボットへのコマンド『0,1,2』を置き換える。
(3)そのシンボリック定数に依存する別のマジックナンバーを探し、
シンボリック定数を使った式に変換する。
(4)コンパイルする
『手順2』テストをする。
(1)
すべてのシンボリック定数の置き換えが終わったら、
コンパイルしてテストをする。
(2)
可能なら、シンボリック定数の値を変更してから
コンパイルしてテストする。
※シンボリック定数にしないほうがいい場合。
- forループの限界チェックで、配列の長さを表すのに、
シンボリック定数を使うのは不適切。
理由は、Javaの配列には、配列の長さを表すlengthフィールドが元々あるから。
- 自明な値にシンボリック定数を使うのは、
かえってソースを読みにくくしてしまう。
修正前
if(100 < input.length()){ ・・・ }
修正後
public class Something{ public static final int MAX_INPUT_LENGTH = 100; } if (MAX_INPUT_LENGTH < input.length()){ ・・・ }