不应存在 magic number
11.13 ID_literal_magicNumber
直接出现在代码中的字面数值称为 magic number,使人难以理解其含义,不利于阅读和维护,应改用具有适当名称的常量或枚举项。
示例:
double foo(double b) {
double a = b * 1.618034; // Non-compliant, 1.618034 is a magic number
return a * (a + b);
}
double bar(double a) {
double b = a * 0.618034; // Non-compliant, 0.618034 is a magic number
return a * (a + b);
}
例中 1.618034 不能表示其含义,而且当这种 magic number 散落在代码的各个角落时,不便于统一管理,造成维护上的困难。
应改为具有名称的常量:
const double goldenRatio = 1.618034; // Compliant
double foo(double b) {
double a = b * goldenRatio; // Compliant
return a * (a + b);
}
double bar(double a) {
double b = a * (goldenRatio - 1); // Compliant
return a * (a + b);
}
常量初始化表达式中的字面数值,以及表示序号起始或简单状态的 0、1 等小字面数值可不受本规则约束。