小编典典

什么是幻数,为什么它不好?

all

什么是幻数?

为什么要避免?

有合适的情况吗?


阅读 104

收藏
2022-03-08

共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
中设置密码字段大小的情况。如果我使用幻数,每当最大大小发生变化时,我必须在两个代码位置进行更改。如果我忘记了一个,这将导致不一致。

JDK 充满了像 inInteger和classes这样Character的例子。Math

PS:像 FindBugs 和 PMD 这样的静态分析工具会检测代码中幻数的使用并建议重构。

2022-03-08