第十二章:基本数据类型
12.1 数值概论
- 避免使用神秘数
- 程序主体中仅能出现的文字量就是0和1,任何其他文字量都应该换成更有描述性的表示
- 预防除0
- 使类型转换变得明显
- 避免混合类型的比较
- 注意编译器的警告
12.2 整数
- 检查整数的除法, 10*(7/10) ≠ (10*7)/10
- 检查整数溢出
- 检查中间结果溢出
12.3 浮点数
float 有效数字8位 占用32bit 4byte
double 有效数字16位 占用64bit 8byte
- 避免数量级相差巨大的数之间的加减运算
- 避免进行等量判断
- 处理舍入误差
12.4 字符和字符串
- 避免使用神秘字符串
- 尽早决定国际化本地化版本
12.5 布尔变量
- 用布尔变量对程序加以文档说明
- 不布尔变量简化复杂判断
- 有需要可以自己定义布尔变量
12.6 枚举类型
枚举类型是一种允许用英语来描述某一类对象中每一个成员的数据类型。
- 用枚举类型来调高可读性
- 提高可靠性
- 简化修改
- 布尔变量的替换方案,可以表示多态
- 检查非法数值
- 定义枚举的第一项和最后一项,以便用于循环边界
- 明确定义枚举的第一个和最后一个元素的使用规则
- 在可以给枚举元素明确赋值时,要注意遍历过程可能会引入无效参数
12.7 具名常量
12.8 数组
- 确认所有数组下标都没有越界
- 考虑用容器来代替数组
- 检查数组的边界
- 确认下标顺序
- 使用更有意义的数组下标
12.9 创建自己的数据类型
第十三章: 不常见的数据类型
13.1 结构体
- 用结构体来明确数据关系
- 用结构体简化对数据块的操作
- 简化参数列表(子程序参数列表可以考虑用这种方式降低复杂度)
- 减少维护
13.2 指针(用到再说)
13.3 全局数据
可能存在的问题
- 无意间修改了全局数据
- 全局变量当参数使用
- 多个线程共同访问一个数据
- 全局变量影响了代码重用,(因为全局变量代表了上下文)
- 破坏了代码的模块化
用访问器子程序来代替全局变量
- 要求全部代码通过访问器子程序来存取数据
- 不要把所有的全局数据都放在一个地方,试着去抽象他们
- 用锁定来控制对全局变量的访问
- 对一项数据的所有访问都发生在同一个抽象层上
如何降低使用全局数据的风险
- 创建一种命名规则来突出全局变量
- 为全部的全局变量创建一份注释良好的清单
- 不用全局变量存放中间结果
- 不用大的对象去掩盖使用全局变量的细节,这个只是画蛇添足