《代码大全》读书笔记

2016-07-06  本文已影响2525人  白桦叶

第一部分 打好基础 Laying the Foundation

第二部分 创建高质量的代码 Creating-High Quality Code

第三部分 变量 Variable

子程序用到全局数据,不能直接将子程序复制到其他地方(其他类)里面,解决方法:上策是修改旧类将全局数据局部化;下策是在新类创建与旧类相同的全局数据,导致像病毒一样传染
* 与全局数据有关的非确定的初始化顺序事宜
> 在初始化一个类的变量时需要使用其他文件的初始化全局变量,所以需要采用明确手段保证两个变量按照正确顺序进行,不然将导致错误
* 全局数据破坏了模块化和智力上的可管理性
* 使用全局数据的理由:
* 保存全局数据:比如程序是否debug等
* 模拟具名常量
* 模拟枚举类型
* 简化对极其常用数据的使用
* 消除流浪数据(tramp data):

有时候传递数据给一个子程序或者类,只是想传递给另一个子程序或者类,如果调用链中间的子程序并不适用这一对象的时候,就称这些数据为流浪数据
* 只有万不得已才使用全局数据
* 按照"局部数据->private数据->protected数据->全局数据"顺序设置数据的作用域
* 区分全局变量和类变量
* 使用访问器子程序
* 用访问器子程序来取代全局数据
* 访问器子程序的优势
* 获得对数据的集中控制:如果要修改结构方法是需要修改子程序即可
* 确保变量的所有引用得到保护,避免出现异常
* 访问器子程序可以容易转变为抽象数据类型:即通过子程序名称实现抽象,提高代码可读性
* 如何使用访问器子程序
* 要求所有数据通过子程序访问
* 不要把全局数据放在一起,而是放在相应抽象水平的类里面
* 用锁来控制对全局数据的访问:在多线程下,子程序访问器加锁,保证数据正确性
* 使得对一项数据的所有访问都发生在同一抽象层上
> 如果有add(event),就会有remove(event)
* 如何降低使用全局数据的风险
* 创建一种命名规则来突出全局变量
> gXXX
* 为全局变量创建一份注释良好的清单
* 不要用全局变量存储中间结果
* 不要把全局变量都放在一个大对象中并到处传递,以说明你没有使用全局变量
> 全局变量应根据其抽象层次防到相应的类中

第三部分 语句 statement

do-while至少执行一次,其他可以不执行
* 什么时候使用while循环 When to Use a Loop-While-Exit Loop
* 什么时候用带退出的循环
* 正常带退出的循环
* 带退出的循环更容易理解
* 带退出的循环可能使退出的地方很多,可能导致在调试、修改或者测试时被忽略,如果可能尽可能把退出的代码写在一个地方
* 非正常带退出的循环
* 什么时候使用for循环 When to Use a for Loop:

你在循环头处写好后即把它忘掉,无须再循环中做任何事情去控制它,如果有一个必须使循环从循环退出的条件,就使用while循环
* 什么时候使用foreach循环 When to Use a foreach Loop:消除循环内务处理算数,防止off-by-one越界错误

就是循环体中前后操作有条件限制关系,当达到某个条件,不执行后续操作时,应当使用break直接退出
* 小心那些有很多break散布在循环中
* 在循环开始处使用continue:提高可读性
* 如果语言支持,请使用带标记号break结构:是break退出的目标一目标然
* 使用break和continue要小心谨慎
* 检查端点 Checking EndPoints
> 简单的循环:开始情况+任意选择的中间情况+最终情况,先脑海模拟,如果有复杂计算,手动检查计算是否正确
* 使用循环变量 Using Loop Variables
* 用整数或者枚举类型表示数组和循环的边界
* 嵌套循环中使用有意义的变量名提高其可读性
* 用有意义的名字防止循环下标串话
* 把循环下标变量限制在本循环内
* 循环应该多长 How Long Should a Loop Be
* 把循环代码的行数限制在50行以内
* 把嵌套限制在3层以内
* 把长循环的内容移到子程序内
* 要让长循环格外清晰

第五部分 代码改善 Code Improvement

上一篇下一篇

猜你喜欢

热点阅读