什么是神奇数字?
为什么许多程序员建议避免使用它们?
幻数是在代码中直接使用数字。
例如,如果您有(在 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 中有很多示例,例如Integer
, Character
and Math
类。
PS:像 FindBugs 和 PMD 这样的静态分析工具可以检测代码中幻数的使用并提出重构建议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)