マジックナンバーとは、他のどこにも出現せず、ステートメントで直接使用される数字のことです。マジックナンバーは、例えば、 ループの反復回数、プロパティの値をテストする際などにしばしば使用されます。

コードを書くときには、マジックナンバーを使うのがわかりやすいかもしれませんが、デバッグ時にはそれがわかりにくくなります。

マジックナンバーは、明示的に名前を付けした定数に割り当て、読みやすくする必要があります。

-1、0、1はマジックナンバーではありません。

違反コード例

public static void doSomething() {
    for(int i = 0; i < 4; i++){                 // Noncompliant, 4 is a magic number
        ...
    }
}

準拠方法

public static final int NUMBER_OF_CYCLES = 4;
public static void doSomething() {
  for(int i = 0; i < NUMBER_OF_CYCLES ; i++){
    ...
  }
}

例外

hashCode メソッド内のでマジックナンバーの使用は無視します。

補足事項

  • この内容は以下の、squid の説明文を日本語翻訳したものです。

    sonar-java/S109_java.html at master · SonarSource/sonar-java

  • リンク化したら使いやすいかもしれないので、1ルールごとに1ページ化しています。

  • こちらに原本はあります。

    • コメント