マジックナンバーとは何ですか?
多くのプログラマーがそれらを避けるようにアドバイスするのはなぜでしょうか?
ベストアンサー1
マジックナンバーとは、コード内で数字を直接使用することです。
たとえば、次のような場合 (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 つのコードの場所を変更する必要があります。1 つを忘れると、不整合が発生します。
JDK にはInteger
、、、Character
クラスのような例が満載ですMath
。
PS: FindBugs や PMD などの静的解析ツールは、コード内のマジックナンバーの使用を検出し、リファクタリングを提案します。