带有警告“100”的 CheckStyle 是一个幻数

CheckStyle with warning '100' is a magic number

在我的代码中,它显示消息“100”的警告是一个魔法number.See下面的代码,

int randomNo = generator.nextInt(100);

我在这里读到它 What is a magic number, and why is it bad? 但我怀疑通过使用静态创建变量来声明 100 会占用更多 space,因为我在单个 place.Is 中使用它,这是正确的解决这个问题的方法?

  public static final int HUNDRED= 100;

有什么建议吗?

它与存储无关,与可读性有关。如果你想更改一些数字,它可能很难在代码中找到,如果它在顶部则更好(如果它在配置文件中,在许多情况下更好)。

是的,这是一个很好的解决方案。

如果您在该文件之外不需要它,您应该将其设为 "private",并且您可能希望更具可读性并使用能表明其真正含义的名称,例如:

MAX_RANDOM_NUMBER=100

最好包括它的用途

MAX_RANDOM_FOR_CARD_SELECTION

或类似的东西。

这样,当您在 5 个月后查看该文件时,因为您添加了 20 张新卡片,您无需看一下代码就可以清楚地知道您需要更改什么。

HUNDRED确实有点傻,但是你为什么选择100,它是什么意思?

类似于:

public static final int RANDOM_UPPER_LIMIT=100;

或更多信息,具体取决于您使用该值的目的:

public static final int MAX_NUMBER_OF_COLORS=100;

会更有意义并提高可读性。

Space 在这种情况下不应该考虑保存,space 声明变量的开销(如果有的话)完全可以忽略不计。

最好不要编写最短的代码,而是编写易于理解和维护的代码。将此 100 存储为常量,您可以添加一个好名字来解释为什么它真的是 100。例如,如果你想生成随机分数并且你的最大可能分数是100,那么你可以定义

static final int MAX_SCORE = 100;

之后你也可以在其他地方使用它。每个人都会理解为什么它是 100 而不是其他。如果有一天你需要更改它,比如说,更改为 200,你将只需要在一个地方替换它,而无需搜索代码。

也有可能在你的程序的其他部分你会有 100,它有不同的含义(比如,MAX_PERCENT)。如果您想将 MAX_SCORE 更改为 200,但保留 MAX_PERCENT 不变,如果您有单独的常量会容易得多。

查看罗伯特·马丁的(鲍勃叔叔)

Clean Code

提供详尽解释的书籍(或任何其他编码风格指南)。基本上,硬编码的“100”对代码的 reader 没有任何意义。在您完成应用程序后的 6 个月内,它对您也没有任何意义。这是一个神奇的数字,因为它出现在代码中——在 100 个案例中有 99 个——几乎是凭空出现的。为什么是 100 而不是 99 或 101?为什么您的应用程序应将随机数生成限制为 100 而不是高于(或低于)?

总而言之,这是您自己的代码的可读性问题,对于现在或将来的代码 reader,这是编码风格的问题。