组织直线型代码(P347)
1.必须有明确顺序的语句(P347)
如果语句之间存在依赖关系,并且这些关系要求你把语句按照一定的顺序加以排列,那么请设法使得这些依赖关系变得明显。
- 设法组织代码,使依赖变得明显
- 使子程序名能凸显依赖关系
- 利用子程序参数明确显示依赖关系
'暗示顺序依赖关系的数据 InitializeExpenseData( expenseData); ComputeMarketingExpense( expenseData); ComputeSalesExpense( expenseData); ComputeTravelExpense( expenseData); ComputePersonnelExpense( expenseData); DisplayExpenseSummary( expenseData);
'表示没有顺序依赖关系的数据 ComputeMarketingExpense( marketingData); ComputeSalesExpense( salesData); ComputeTravelExpense( travelData); ComputePersonnelExpense( personnelData); DisplayExpenseSummary( marketingData,salesData,travelData,personnelData);
- 用注释对不清晰的依赖关系进行说明
- 用断言或者错误处理代码来检查依赖关系
2.顺序无关的语句(P351)
1)使代码易于自上而下地阅读
作为一条普遍性原则,要让程序易于自上而下阅读,而不是让读者的目光跳来跳去。专家们认为自上而下的顺序对提高可读性最有帮助。
//跳来跳去的糟糕代码 MarketingData marketingData; SalesData salesData; TravelData travelData; travelData.ComputeQuarterly(); salesData.ComputeQuarterly(); marketingData.ComputeQuarterly(); salesData.ComputeAnnual(); marketingData.ComputeAnnual(); travelData.ComputeAnnual(); salesData.Print(); travelData.Print(); marketingData.Print();
//组织良好的顺序代码,能从头到尾阅读 MarketingData marketingData; marketingData.ComputeQuarterly(); marketingData.ComputeAnnual(); marketingData.Print(); SalesData salesData; salesData.ComputeQuarterly(); salesData.ComputeAnnual(); salesData.Print(); TravelData travelData; travelData.ComputeQuarterly(); travelData.ComputeAnnual(); travelData.Print();
2)把相关的语句组织在一起
同上所述。
使用条件语句(P355)
1.if语句(P355)
1)简单if-then语句
- 首先写正常代码路径;再处理不常见情况
- 确保对于等量分支是正确的
请不要用“>”代替">="等情况出现- 把正常情况的处理放在if后面而不要放在else后面
- 让if子句后面跟随一个有意义的语句
- 考虑else子句
//有益的、带注释的else子句 if( COLOR_MIN <= color && color <= COLOR_MAX){ //do something ... } else { //else color is invalid //screen not written to -- safely ignore command }
- 测试else子句的正确性
- 检查if和else子句是不是弄反了
2)if-then-else语句串
- 利用布尔函数调用简化复杂的检测
- 把最常见的情况放在最前面
- 确保所有的情况都考虑到了
- 如果你的语言支持,请把if-then-else语句串替换成其他结构
2.case语句(P361)
1)为case选择最有效的排列顺序
- 按字母顺序或按数字顺序排列各种情况
- 把正常的情况放在前面
- 按执行频率排列case子句
2)使用case语句的诀窍
- 简化每种情况对应的操作
- 不要为了使用case语句而刻意制造一个变量
与其刻意制造一个本不适用于case的假冒变量,不如使用一个if-then-else-if检测串来检查整个字符串。- 把default子句只用于检查真正的默认情况
- 利用default子句来检测错误
- 在C++和Java里,避免代码执行越过一条case子句的末尾
- 在C++里,在case末尾明确无误地标明需要穿越执行的程序流程
如果要你故意让代码越过某一case子句末尾的话