Java软件低级错误(五):魔鬼数字
2011-08-11 19:03
302 查看
¨解读
在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。
将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。
在个别情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量。
案例
// 魔鬼数字,无法理解3具体代表产品的什么状态
if (product.getProduct().getProductStatus() != 3)
{
throw new PMSException(PMSErrorCode.Product.ADD_ERROR);
}
// 仍然是魔鬼数字,无法理解NUM_THREE具体代表产品的什么状态
if (product.getProduct().getProductStatus() != NUM_THREE)
{
throw new PMSException(PMSErrorCode.Product.ADD_ERROR);
}
//例子中虽然将数字定义为了常量,但代码却并不容易理解
Point drawCenter = new Point();
drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / HALF_SIZE_DIV;
drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / HALF_SIZE_DIV;
return drawCenter;
//直接使用数字,代码反而更容易理解
Point drawCenter = new Point();
drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / 2;
drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / 2;
return drawCenter;
在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。
将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。
在个别情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量。
案例
// 魔鬼数字,无法理解3具体代表产品的什么状态
if (product.getProduct().getProductStatus() != 3)
{
throw new PMSException(PMSErrorCode.Product.ADD_ERROR);
}
// 仍然是魔鬼数字,无法理解NUM_THREE具体代表产品的什么状态
if (product.getProduct().getProductStatus() != NUM_THREE)
{
throw new PMSException(PMSErrorCode.Product.ADD_ERROR);
}
//例子中虽然将数字定义为了常量,但代码却并不容易理解
Point drawCenter = new Point();
drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / HALF_SIZE_DIV;
drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / HALF_SIZE_DIV;
return drawCenter;
//直接使用数字,代码反而更容易理解
Point drawCenter = new Point();
drawCenter.x = parentWindow.x + (parentWindow.width - clientWindow.width) / 2;
drawCenter.y = parentWindow.y + (parentWindow.height - clientWindow.height) / 2;
return drawCenter;
相关文章推荐
- Java软件低级错误(六):字符串转数字时未进行异常处理
- Java软件低级错误:字符串转数字时未进行异常处理
- Java软件低级错误(十 六):使用包装器对象带来的低效问题
- Java软件低级错误(十 九):静态变量的初始化问题
- Java软件低级错误(二):常量对象化判断避免空指针异常
- Java软件低级错误(十 一):正确理解Java的浅clone和深clone
- Java软件低级错误(一):资源未及时释放
- Java软件低级错误(二十 ):正确理解String/StringBuffer/StringBuilder的性能区别
- Java软件低级错误:短路运算和非短路运算的区别
- Java软件低级错误(十 五):大小写转换的正确处理
- Java软件低级错误: 定义equals方法的同时也要定义hashCode方法
- Java软件低级错误(十 四):定义equals方法的同时也要定义hashCode方法
- Java软件低级错误(十 ):正确定义hashcode
- Java软件低级错误(十 五):大小写转换的正确处理
- Java软件低级错误(八 ):序列化类的多版本问题
- Java软件低级错误(九 ):Java参数传递:传值还是传引用?
- Java软件低级错误(十二):Java的移位(>>和>>>)运算问题
- Java软件低级错误(十 三):短路运算和非短路运算的区别
- Java软件低级错误(十 八):忽略InputStream.skip()返回值的处理
- Java软件低级错误(十 七):对于Map元素的遍历使用entrySet还是KeySet?