【问题标题】:A magic number overkill一个神奇的数字矫枉过正
【发布时间】:2019-08-24 13:48:44
【问题描述】:
我有一段代码,我在其中调用带有字符串值参数的函数。字符串值取自使用索引的字符串数组。
if (validateRejectionCategory(rejectionData[0])) {
......
}
在这种情况下,0 仍然被认为是一个幻数吗?我应该将 0 抽象为像 REJECTION_CATEOGRY_POSITION 这样的变量吗?函数名称是否不够清楚地表明该值将是拒绝类别?
请告诉我你的想法。
【问题讨论】:
标签:
coding-style
magic-numbers
【解决方案1】:
一般来说,将每个数值提取为常数是一个坏习惯。您必须像生活中的所有事物一样保持平衡。很明显,您要验证rejectionData 的第一个元素。 0、1、2 的大多数用法不是魔术,而是用于算法。
您通常希望提取在代码上下文中不易解释的数值。
例如如果您的代码在一些类似 main 的文件中看起来像这样:
app.modalTimeooutSeconds = 3.0
把它重写为真的不是更易读
let timeoutSeconds = 3.0
app.modalTimeoutSeconds = timeoutSeconds
除非你想存储一个常量配置文件,但你可能没有足够的常量来支持这样的文件。
一切都取决于上下文,没有好的答案。