Nov 30, 2008

Code Complete PART 4

Statements
Chapter 14. Organizing Straight-line code
主要原则:按照依赖关系进行排列
1. Statements that must be in a sepcific order
设法组织代码,使依赖性变得非常明显
利用子程序名、子程序参数显示依赖性
用注释对不清晰的依赖关系进行说明
2. Statements whose order doesn't matter
making code read from top to buttom
localized --> short live time
grouping related statements
不应该交叠,但可能嵌套

Chapter 15: Using conditionals
1. if statements
plain if-then statements
先处理正常情况,然后其它
确保对于“==”是正确的
把正常的情况处理放在“if”后面
让if语句后跟随一个有意义的子句
chains of if-then-else statements
用布尔函数简化复杂的检测
最常见的放最前
2. case statements
choosing the most efficitve ordering of cases
字母序、正常放最前、频率序
tips for using case statements
简化每种情况对应的操作
不要为使用case刻意制造一个变量
default子句只用于检查真正的默认情况
避免代码执行跨越一条case子句的末尾

Chapter 16. Controlling Loops
1. selecting the kind of loop
counted loop; coutinously evaluated loop; endless loop; iterator loop
when to use while loop
预先不知道迭代的次数
with test at the beginning & end
when to use a loop-with-exit loop
终止条件出现在循环的中部
break; goto
把所有的退出条件放在一处,用注释阐明意图
when to use a for loop
执行固定次数的循环,不需要循环内部控制
when to use a foreach loop
消除了循环内务处理
2. Controlling the loop
减少影响循环的因素数量,把循环内部当作子程序
entering the loop
只从头部进入
初始化代码紧反正循环前
用while表示无限循环
在while适用的时候,不使用for
processing the middle of the loop
避免空循环
循环的内务操作反正循环的开始或结尾
一个循环只做一件事
exiting the loop
终止确认条件
避免依赖循环下标的最终取值
考虑使用循环计数器
小心break&continue
带标号的break
checking endpoints
using loop variables
使用有意义的名字:提高可读性,避免下标串话
把循环下标的作用域限制在本循环内
how long should a loop be
尽可能短,嵌套在三层以内
把长循环的内容移到子程序内
3. Creating loops easily - from the inside out
inside out; 使用字面量
4. Correspondence between loops and arrays
密切联系但不是必然的

Chapter 17: Unusual contorl structures
1. Multiple returns from a routine
如果能增强可读性,就使用return
用guard clause(早返回或退出)来简化错误处理
2. Resursion
tips for using recursion
确认递归能够停止
使用安全计数器防止无穷递归
限制在一个子程序内
递归 or 循环 -- 阶乘
3. goto
万不得已才使用goto
goto导致的效率的提升需可以估量
尽量在每个子程序中最多使用一个goto
尽量让goto先前跳转而不是向后
goto标号
确认goto不会产生执行不到的代码

Chapter 18: Table-driven methods
Table-driven is a scheme -- 从表里查找信息而不是用if or case
复杂逻辑和复杂继承结构的替代方案
1. General considerations of using Table-Driven methods
查询记录的方法:
Direct access
Indexed access
Stair-step access
2. Direct access tables
Date-in-Month example
Flexible-Message-Format Example
Logic basied vs. Object-Oriented vs. Table-Driven
Fudging lookup keys
复制信息从而能直接使用键值
转换键值使之能直接使用
把键值转换提取成独立的子程序
3. Indexed Access tables
4. Stair-step Access tables
把每一区间的上限写入表中,使用循环按照各区间的上限检查分数
留心端点
二分法查找,索引访问?
最好是去选择一个好的方案同时避免灾难,而不是试图寻找最佳的方案。
5. Other Examples of Table loopups

Chapter 19: General Control Issues
1. Boolean expressions
Using the true and false for boolean tests
Making complicated expressions simple
拆分复杂的判断并引入新的布尔变量
将复杂的表达式做出布尔函数
用决策表代替复杂的条件
Forming boolean expressions positively
I ann't not no undummy. 我并非不是一个不傻的人。
用狄摩根简化
Using parantheses to clarify boolean expressions
Knowng how boolean expressions are evaluated
Writing numeric expressions in Number-line 2order
Guildines for comparisions to 0
隐形地比较逻辑变量
和数值表达式相比使用显示写法
指针 -- NULL
Common problems with boolean expressions
C家族中,应该把常量反正比较的左端

2. Compound Statements(Blocks)

3. Null statements

4. Taming Dangerously deep nesting

重复检查条件中的某一部分来简化嵌套的if

使用break来简化

if --> if-then-else

if --> case

抽取并放入子程序

对象和多态派分

5. A programming foundation: Structured Programming

structured goofing off 结构化混日子

The three components of structured programming

sequence; selection; iteration

6. Control structures and complexity

应用程序的复杂度是由它的控制流来定义的

General guidelines for reducting complexity

How to measure: decision point

if; while; repert; for; and; or; case

0-5: good; 6-10; 10+

0 comments: