代码大全第二版 第十章 使用变量的一般事项 读书笔记
General Issues in Using Variable
把第十章作为开篇重读《代码大全》,并做好详细的读书笔记,希望它能给我全新的收获。
10.0 前言
利用构建活动来填补需求和架构中存在的细小间隙是一种行之有效的办法。但把蓝图设计得精细到已经能完全展现所有的细节则实在是一种低效的办法。
10.1 数据认知 Data Literacy
10.2 轻松掌握变量的定义 Making Variable Declarationgs Easy
1.养成一个良好的习惯会为你在整个项目周期内省去很多时间和麻烦。
2.隐式变量声明对于任何一种语言来说都是最具危险性的特征之一,一些解决的建议:
第一、关闭隐式声明
第二、声明全部变量
第三、遵循某种命名规则
第四、检查变量名
10.3 变量名的初始化原则 Guidelines for Initializing Variables
1.在理想状况下,最好在靠近第一次使用变量的位置声明和定义该变量
2.最好在类的构造函数里初始化该类的数据成员。
3.想一次性初始化具名常量,可以用执行代码(executable code)来初始化变量。
4.好好利用编译器的警告信息,很多编译器会在你使用了未经初始化的变量的时候发出警告
5.最好在程序开始时初始化工作内存。
10.4 作用域 Scope
1.“作用域”可以看作是一种衡量变量的知名度的方法。
2.使变量引用局部化。一般而言,把对一个变量的引用局部化,即把引用点尽可能集中在一起总是一种很好的做法,其主要好处是阅读者的目光不会在程序里跳来跳去,可以提高程序的可读性。
3.衡量一个变量的不同引用点的靠近程度的一种方法是计算该变量的“跨度(span)”,跨度通常都是越小越好。
4..尽可能缩短变量的“存活”时间。“存活时间(live time)”,即一个变量存在其间所跨越的语句总数。变量的存活时间开始于引用它的第一条语句,结束于引用它的最后一条语句。
5.缩短变量存活时间的另一个好处是你能对自己的代码有更准确的认识。
6.短的代码存活时间同样减少了初始化错误的可能。
7.变量存活时间短还会使代码更具可读性。
8.当需要把一个大的子程序拆分成多个小的子程序时,短的变量存活时间也很有价值。如果对变量的多次引用靠得非常近,那么把相关的代码片段重构为单独的子程序就会非常容易了。
9.如果你用跨度和生存时间的概念来考察全局变量,就会发现全局变量的跨度和生存时间都很长——这也是要避免使用全局变量的原因。
10.以下是一些你可以用来减小作用域的特别有用的原则。
(1)在循环开始之前再去初始化该循环里使用的变量,而不是在该循环所属的子程序开始处初始化这些变量。
(2)直到变量即将被使用时再为其赋值。
(3)把相关语句放到一起。
(4)把相关语句组提取成单独的子程序。
(5)开始时采用最严格的可见性,然后根据需要扩展变量的作用域。
11.把全局变量转换为类成员要比把类成员转换为全局变量难得多。
12.“方便性”和“智力可管理性”两种理念之间的区别,归根结底来源于侧重写程序还是读程序之间的区别。
14.你应该吧每个变量定义成只对需要看到它的、最小范围的代码段可见。
10.5 持续性 Persistence
1.为了避免视图在变量的生命期结束之后再访问它的数据,可以采取以下措施:
(1)在程序中加入调试代码或者断言来检查哪些关键变量的合理取值。
(2)准备抛弃变量时给他们附上“不合理的数值”。
(3)编写代码时要假设数据并没有持续性。
(4)养成在使用所有数据之前声明和初始化的习惯。
10.6 绑定时间 Bingding Time
1.对程序维护和更改有很深远的影响的一个话题就是“绑定时间”:把变量和它的值绑定在一起的时间。
2.采用越晚的绑定时间越有利。通常而言,你把绑定时间定义得越晚,你的代码里就包含了越多的灵活性。
3.一般而言,绑定时间越早灵活性就越差,但复杂度也会越低。
4.除此之外,希望获得的灵活性越强,那么支持这种灵活性的代码就会越复杂,出错几率也会越高。
10.7 数据类型和控制结构之间的关系
Relationship Between Data Types and Control Structures
1.序列型数据翻译为程序中的顺序语句
2.选择型数据翻译为程序中的if和case语句
3.迭代型数据翻译成程序中的for。Repeat、while等循环结构
10.8 为变量指定单一用途 Using Each Variable for Exactly One Purpose
1.每个变量只用于单一用途
2.避免让代码具有隐含含义
3.确保使用了所有已声明的变量
第十章笔记完。