第三部分 第12章 基本数据类型
1数值概论:
1)避免使用“神秘数值(magic number)”(其实就是具体数值),如100或者47523,而应该使用具名常量。
2)预防除零错误
3)不要依赖隐式转换,将其变得明显,能使你的代码变得更加容易维护(就如其他隐式的东西一样)
4)避免混合类型的比较
2整数
1)检查整数乘法的溢出
2)检查整数除法
3)检查中间结果溢出
java实例:
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;
这个例子得出的情况将为大出许多人的意外。具体情况参看《Java解惑》谜题三:长整除
3浮点数
1)避免数量级相差巨大的数之间的加减运算
2)避免等量判断:很多应该相等浮点数值并一定相等。
3)处理舍入误差问题
一些解决舍入问题的方案:
3.1)换用一种精确度更高的变量类型。如果你正在用单精度浮点值,那么就换用双精度浮点值
3.2)换用二进制编码的十进制变量。BCD模式的处理通常更慢一些,并且要占用更多的存储空间,但是它能防止很多舍入错误的发生(java中BigDecimal怎么写出来的?)
3.3)把浮点型转为整形变量。这是一种自力更生转到BCD变量的方法。你可能必须要用64位整数才能获得所需的精度。
4字符和字符串
1)避免使用神秘字符和神秘字符串
2)避免off-by-one错误
3)了解你的语言和编程环境是如何支持Unicode的(Java的char类型为Unicode编码)
4)如果你需要支持多种语言,请使用Unicode
5布尔类型
1)使用布尔变量对程序加以文档说明,同时也可以简化复杂的判断,使程序结构和意图一目了然
java示例:目标不明确的布尔类型
if ( ( elementIndex < 0 ) || ( MAX_ELEMENTS < elementIndex ) ||
( elementIndex == lastElementIndex )
) {
//do something
}
Java示例:目标明确的布尔类型
boolean finished = ( elementIndex < 0 ) || ( MAX_ELEMENTS < elementIndex );
boolean repeatedEntry = ( elementIndex == lastElementIndex );
if ( finished || repeatedEntry ) {
//do something
}