【问题标题】:Are magic numbers always bad? [closed]魔术数字总是不好的吗? [关闭]
【发布时间】:2013-08-02 01:46:15
【问题描述】:

硬编码具有自我描述性并且只会在一个地方使用的字符串是否被认为是不好的做法?你总是用常量变量替换硬编码的字符串吗?数字呢?它们是否具有足够的自我描述性而不会创建变量?你能举一个你认为幻数合适的例子吗?

【问题讨论】:

  • 所有这些问题的答案都是:“视情况而定”或“见仁见智”。

标签: string numbers constants


【解决方案1】:

“只会在一个地方使用”的硬编码字符串的问题是:如果你需要更改字符串,你必须在你的代码中寻找。获取程序的版本号。您可能只在从“信息”菜单调用的对话框中使用它 - 但如果您在那里对其进行硬编码,那么每次更新版本号时,您都必须在“某处”找到字符串。将所有常量字符串放在一个位置会更容易。

至于数值 - 在某些情况下(例如,在科学方程式中),偶尔的常数可能是硬连线的。通常这仅适用于整数(没有人会对circumference = 2 * pi * radius; 中的硬编码2 退缩)。其他常量将再次在一个地方更好地定义 - 更易于调试和维护。例如,我更喜欢只定义一次pi(我的偏好:pi = 2 * asin(1.0);)。与e (e = exp(1.0);) 相同。

想想在六个月内查看/使用您的代码的人。你让他们的生活更轻松还是更艰难?如果他们转移到不同的平台怎么办?这些问题可以帮助您做出正确的选择。

【讨论】:

  • 很好的例子和值得思考的事情,谢谢。
【解决方案2】:

我不知道你想用哪种语言编写,因为它们都有自己喜欢的解决方案,但例如在 C/C++ 中,enum 通常是要走的路。

C++11 的严格类型枚举甚至更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    相关资源
    最近更新 更多