【问题标题】: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 的第一个元素。 012 的大多数用法不是魔术,而是用于算法。

    您通常希望提取在代码上下文中不易解释的数值。

    例如如果您的代码在一些类似 main 的文件中看起来像这样:

    app.modalTimeooutSeconds = 3.0
    

    把它重写为真的不是更易读

    let timeoutSeconds = 3.0
    app.modalTimeoutSeconds = timeoutSeconds
    

    除非你想存储一个常量配置文件,但你可能没有足够的常量来支持这样的文件。

    一切都取决于上下文,没有好的答案。

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2012-07-06
      • 2013-01-10
      相关资源
      最近更新 更多