带有警告“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,这是编码风格的问题。
在我的代码中,它显示消息“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,这是编码风格的问题。