Magic Number

概要

ソースコード内にマジックナンバーがないときに達成できる実績です.

タイトル
No more magic

この実績には,以下のルールが含まれます:

  • MagicNumber

MagicNumber

コード内にマジックナンバーが存在しないかをチェックします. -1, 0, 1, 2 はマジックナンバーとはみなされません.また,一つの定数を定義する際に複数の数値を用いることは可能です.

static final int SECONDS_PER_DAY = 24 * 60 * 60;
static final double SPECIAL_RATIO = 4.0 / 3.0;
static final double SPECIAL_SUM = 1 + Math.E;
static final double SPECIAL_DIFFERENCE = 4 - Math.PI;
static final Border STANDARD_BORDER = BorderFactory.createEmptyBorder(3, 3, 3, 3);
static final Integer ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE = new Integer(42);

コード例

@MyAnnotation(6)     // !!! マジックナンバーです
class MyClass {
  private field = 7; // !!! マジックナンバーです

  void foo() {
    int i = i + 1;   // マジックナンバーではありません
    int j = j + 8;   // !!! マジックナンバーです
  }
}

このルールのチェックには,Checkstyleの MagicNumber を用いています.

注釈

マジックナンバー ( Magic number ) とは,ソースコード中に書かれた具体的な数字のことを指します. そのプログラムを書いた時点では,プログラマはその数字の意図を把握していますが,他のプログラマーや製作者本人がマジックナンバーの意図を忘れたときに閲覧すると その数字の意図がわからなくなります.

「マジックナンバー」という名前には,「この数字の意味はわからないが,何故かプログラムは正しく動く.まるで魔法の数字だ」という皮肉を含んでいます. なお,本来プログラム中に記述すべきでないリソースを,直接ソースコード中に埋め込むことを ハードコーディング ( Hard coding )といいます.

プログラム内で用いる定数は const 宣言することにより,可読性が上がり,変更を行いやすくなります. また,数字を変更してしまうことによるバグを削減することができます.

参考文献: マジックナンバー (プログラム) - Wikipedia