【发布时间】:2011-10-16 18:16:31
【问题描述】:
我认为这是相当独立于语言的,但如果我错了,那就选择 C#(或 C 或 C++)。
对于“简单”的魔法值,我的意思是这样的:
if (Value > 0)
或
while (Value < 0)
或
while (MyQueue > 0)
在写这个(上面的伪代码)时,我有点震惊,它真的只适用于与 0 比较的东西。
无论如何,处理这些神奇值的最佳方法是什么(考虑到可读性、要创建的击键/代码数量和命名)?
将整个(静态)类(或 C# 中的枚举)专门用于此,感觉像是极端的矫枉过正。
【问题讨论】:
-
幻数不是要输入多少个字符,而是它们的含义——它们在上下文中是否明显且恒定。
-
取决于这些幻数是否改变。一个例子:如果要检查队列是否为空,并且将队列长度与0进行比较,则不必封装0,因为空队列的长度始终为0。可以调整的参数值应该包含在里面一个枚举/类等。如果您有一些复杂的条件,例如“如果队列中没有红色项目,则队列为空”,请编写一个辅助函数,如
isEmpty(MyQueue) -
是的,正如我所写,它真的只适用于当你将某些东西(比如队列!)与 0 进行比较时,检查列表/等中的长度/对象。
-
@delnan 我确实写过“可读性”,至少在我的世界里,它会受到你所写内容的影响 :)
标签: magic-numbers magic-string