1. ホーム
  2. language-agnostic

[解決済み】マジックナンバーとは何ですか、なぜ悪いのですか?[クローズド]

2022-03-23 14:06:57

質問

マジックナンバーとは何ですか?

なぜ避けるべきなのか?

適切なケースはありますか?

どのように解決するのですか?

マジックナンバーとは、コード内で数字を直接使用することです。

例えば、(Javaで)ある場合。

public class Foo {
    public void setPassword(String password) {
         // don't do this
         if (password.length() > 7) {
              throw new InvalidArgumentException("password");
         }
    }
}

にリファクタリングする必要があります。

public class Foo {
    public static final int MAX_PASSWORD_SIZE = 7;

    public void setPassword(String password) {
         if (password.length() > MAX_PASSWORD_SIZE) {
              throw new InvalidArgumentException("password");
         }
    }
}

コードの可読性が向上し、メンテナンスもしやすくなります。GUIでパスワードフィールドのサイズを設定するケースを想像してください。もしマジックナンバーを使うと、最大サイズが変わるたびに、2カ所のコードを変更しなければなりません。もし片方を忘れてしまったら、矛盾が生じます。

JDKには、以下のような例がたくさんあります。 Integer , CharacterMath クラスがあります。

PS: FindBugsやPMDのような静的解析ツールは、コード中のマジックナンバーの使用を検出し、リファクタリングを提案します。