Code Complete部分笔记

Ch 7. 高质量的子程序
1) 子程序(函数,过程)应具有良好的内聚性,专注于做一件事情。
2) 应有一套子程序的命名规则。
3) 子程序之间尽可能正交,降低耦合度。
4) 子程序的参数应该呈现出一致的抽象性。
5) 参数应有统一的顺序:输入参数,可变参数,输出参数(尽量不超过7个)。
6) 每个分支都应有正确的返回值。

Ch 8. 防范式编程(部分)
1) 子程序应该检查参数,保护自己。
2) 使用断言式编程(assert),并注意前条件和后条件。
3) 添加辅助调试的代码。

Ch 10. 使用变量的一般注意事项
1) 变量的声明和初始化位置应紧靠其第一次使用的位置。
2) 计数器和累加器在使用之前应进行初始化。
3) 将变量的引用点集中,使其跨度尽量小。
4)变量的绑定时间尽可能晚。

Ch 12. 基本数据类型
1) 避免使用magic number.
2) 考虑除零错误。
3) 避免混合类型的比较。
4) 整数除法得到整数。
5) 避免数量级差距太大数据的运算。
6) 中间数据的溢出。
7) 对浮点做等量比较。

Ch 14. 组织直线型代码
1)代码应体现语句间的依赖关系。
2)相关的语句应被组织在一起。
3)尽量避免写出需要上下跳跃阅读的代码。

Ch 15. 使用条件语句
1)正常情况应放在if里。
2)应把复杂的条件判断封装在布尔函数里。
3)最后应用else反映出其他情况。

Ch 16. 循环控制
1)在合适的情况下用while取代for循环。
2)把内务处理集中放在循环开头或尾部。
3)内部代码不应修改循环下标。
4) 下标名要有意义,避免串话。
5)在合适的情况下建立安全计数器。
6) 保证循环在任何情况下都能够退出。

Ch 18. 表驱动法
1)把复杂逻辑或高消耗运算转换为查表的方式非常好。
2)直接访问表:直接构造数组。
3)索引访问表:先访问key再访问实际表项。
4)阶梯访问表:适用于范围型键值的映射,用数组构造阶梯,对数组遍历实现映射。

Ch 19. 一般控制问题
1)用true和false,而不用1和0。
2)按照数轴顺序编写判断。
3)驯服多重嵌套(to be done)。

Ch 25. 代码调整策略
1) 减少程序与操作系统间的交互来提高性能。
2) 减少I/O来提高性能。
3) 用量化的方法找出程序的性能瓶颈。

Ch 26. 代码调整方法
26.1(逻辑):
a) 知道答案后停止求值,比如短路求值。
b) 按照出现频率的大小来调整判断顺序。
c) 用表驱动法代替复杂的表达式。
d) 惰性求值,在需要用到是在进行求值。
26.2(循环):
a)把条件判断提出循环(常常会破坏代码的可维护性)。
b)将两个独立的循环合并(副作用同上)。
c)展开循环,包括完全展开和不完全展开。
d)将循环内部的不变量提出来,避免重复计算。
e) 哨兵值,将需要寻找的值放在数组末尾,这样可以同时判断是否找到和是否到了数组末尾。
f) 把迭代次数最多的循环放在最里面。比如外部循环100次,内部循环5次,则一共需要100+100*5 = 600次,而颠倒顺序后只需要5+100*5 = 505次。
g) 削减计算强度,用低强度的计算(比如加减)来代替花费高昂的运算(比如乘除)。
26.3 (数据变换):
a) 在合适的情况下尽量使用整型。
b) 在合适的情况下尽量使用低维数组。
c) 使用缓存机制。
26.4(表达式):
a)使用复杂代数式的恒等形式。
b)削减计算强度。
c)编译器初始化。
d)在不求精度的情况下,可以不采用精度高但运算缓慢的系统函数、标准库函数。
26.5(子程序):
a) 声明为内联函数,但是在现代计算机上节约的开销不明显。
26.6(用低级语言重写代码):

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值