这是一个颇具争议的话题,我想与程序员一样多。但是,为此,我想知道业务(或您的工作场所)中的常见做法。
在我的工作场所,我们有严格的编码准则。其中一部分专门用于魔术字符串/数字。它指出(对于C#):
除了定义符号常量外,请勿在代码中使用数字或字符串的文字值。使用以下模式定义常量:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
有例外:几乎可以始终安全地使用值0、1和null。通常,值2和-1也可以。用于记录或跟踪的字符串不受此规则的限制。当文字的含义在上下文中很清楚且不受将来的更改时,允许使用文字。
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
理想的情况是在以下情况下一些官方研究论文对代码的可读性/可维护性产生影响:
- 魔术数字/字符串无处不在
- 魔术字符串/数字会被常量声明合理地替换(或在不同程度的覆盖范围内)-请不要因为使用“合理地”而对我大喊大叫,我知道每个人都有不同的想法,“合理地”是什么
- 魔术字符串/数字被多余地替换在不需要的地方(请参见下面的示例)
在与一位同事争论时,我希望这样做具有一些基于科学的论据,而后者将要声明常量,例如:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
另一个例子是(这是在JavaScript中):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
如果仅在1个地方使用DOM ID,您是否将DOM ID粘贴在JavaScript文件的顶部?
我阅读了以下主题:
StackExchange
StackOverflow
字节数IT社区
还有很多文章,阅读这些文章后,就会出现一些模式。
所以我的问题是在代码中使用魔术字符串和数字吗?我特意在寻找可能的参考文献支持的专家解答。
NumberTen = 10
这毫无意义,因为不会重新定义数字10。MaxRetryCount = 10
有一点我们可能要更改最大重试次数。private const char SemiColon = ';';
哑。private const char LineTerminator = ';'
; 聪明。