代码大全学习笔记——第十章使用变量的一般事项10.1
10.1 数据认知
数据认知测试
10.2 轻松掌握变量定义
隐式声明语言中的建议
- 关闭隐式声明
- 声明全部的变量
- 遵循某种命名规则
- 检查变量名
10.3 变量初始化原则
不恰当的变量初始化
- 从未对变量赋值:它的值只是程序启动时变量所处内存区域的值
- 变量值已经过期:变量在某个地方曾经被赋值,但该值已经不再有效
- 变量的一部分被赋值,而另一部分没有
避免初始化错误的建议
- 在声明变量的时候初始化:在声明变量的同事对齐初始化是一种非常方便的防御式编程方法,是一种很好的用于防范初始化错误的保险策略
- 在靠近变量第一次使用的位置初始化它:此建议是针对Visual Basic在内的一些不支持在声明变量的同事进行初始化的语言
- 理想情况下,在靠近第一次使用变量的位置进行声明和定义该变量:理想情况下,C++、JAVA和C,每个变量都应该在声明的同时被定义
- 在可能的情况下使用final或者const:用final和const关键字在定义类常量、输入参数以及任何初始化后其值不在发生改变的局部变量时非常有用
- 特别注意计数器和累加器: i、j、k、sum和total等变量常用做计数器(counter)或累加器(accumulator),在下一次使用这些变量之前忘记重置其值也是一冲常见错误
- 在类的构造函数里初始化该类的数据成员:正如子程序的变量应该在每一个子程序内部初始化一样,类的数据也应该在其构造函数中初始化
- 检查是否需要重新初始化
- 一次性初始化具名常量;用可执行代码来初始化变量:此建议没有太读明白
- 使用编译器设置来自动初始化所有变量
- 利用编译器的警告信息
- 检查输入参数的合法性
- 使用内存访问检查工具来检查错误的指针:某些操作系统里,操作系统的代码会负责检查哪些非法的内存引用
- 在程序开始时初始化工作内存:对于嵌入式来说,此方式不是很适合
10.4 作用域
作用域指的是变量在程序内的可见和可引用的范围。
使变量引用局部化
把变量的引用点集中起来的主要好处是提高程序的可读性;同一个变量被引用的两行之间间隔代码的行数为跨度,变量在程序中的跨度越小程序越易读;
尽量可能缩短变量的“存活”时间
存活时间,即一个变量存在期间所跨越的语句总数,变量的存活时间开始于引用它的第一条语句,结束于引用它的最后一条语句;保持较低的存活时间也是编程的目标;缩短存活时间的好处:首先是减小攻击窗口,其次是使你能对自己的代码有更准确的认识,再次是减小了初始化错误的可能和提高了代码的可读性,最后是当需要把一个大的子程序拆分为多个小的子程序时,端的变量存活时间也很有价值;
测量变量的生存时间
减小作用域的一般原则
- 在循环开始之前再去初始化改循环里使用的变量,而不是在该循环所属的子程序的开始处初始化这些变量
- 直到变量即将被使用时在为其赋值
-
把相关语句放到一起
- 把相关语句组提取承担度的子程序:一个更短的子程序中的变量通常比更长的子程序中的变量有更小的跨度和存活时间
- 开始时采用最严格的可见性,然后根据需要扩展变量的作用域:减少变量作用域的方法之一就是尽量使变量局部化