《代码大全》学习笔记——第十九章,一般控制问题

 

     第十九章,一般控制问题

前言

19.1 布尔表达式

TRUE FALSE 做布尔判断。

简化复杂的表达式:

1、  拆分复杂的判断并引入 的布尔变量。

2、  把复杂的表达式做成布尔函数。

3、  用决策表代替复杂的条件。

 

编写肯定形式的布尔表达式

1、  if 语句中,把判断条件从否定形式转化为肯定形式。并且互换 if else 中的代码。

2、  用狄摩根定理简化否定的布尔判断——将 not a and not b  --->  not ()

 

用括号是布尔表达式清楚

按照数值的顺序编写数值表达式

0 比较的指导原则:

1、  隐式的比较逻辑变量: if (!done)

2、  把数和 0 比较: if (balance != 0)

3、  c 中显示的比较字符和零终止符( ’/0’ while (*charPtr != ‘0’)

4、  指针与 NULL 比较。

 

布尔表达式的常见问题

1、  c 家族语言中,应该把常量放在比较的左端。

2、  Java 中, a==b 表示 a b 是否引用同一个变量。

3、  a.equals(b)a b 是否相同。

 

19.2 复合语句

if 后面即便是只有一条语句,也用括号括起来。

 

19.3 空语句

1、  小心使用空语句

2、  为空语句创建一个 DoNothing() 预处理宏或者内联函数。

3、  使用非空的循环体进行优化。使用更加直截了当的编程方法。而不是自作聪明的使用循环的副作用。

19.4 驯服危险的深层嵌套

深层嵌套会降低程序的可读性,增加复杂性。

避免的方法:

1、  重复检查条件来简化嵌套。把一个大的嵌套,更改为几个小的嵌套。最外面的条件判断是重复的。

2、  break 来简化嵌套。不是一个很好的办法。

3、  把嵌套 if 简化为一组 if-then-else

4、  if 转换为 case

5、  把申请嵌套抽取出来放进单独的子程序中。最好的一个方法。

6、  一个更面向对象的方法。用面向对象来代替复杂的嵌套

7、  重新设计深层嵌套的代码:如果层次很深,则说明你对这一段代码的理解不深刻。

19.5 编程基础:结构化编程

结构化编程的三个组成部分:

1、  顺序

2、  选择

3、  迭代:循环

 

中心:任何一种控制流都可以由顺序,选择和迭代这三种结构生成。对于除这三种之外的任何控制结构—— break continue return throw-watch ——都要持一种批判的态度。

 

19.6 控制结构与复杂度

程序复杂度的一个衡量标准:为了理解程序,你必须在同一时间记住的智力实体的数量。控制流是程序复杂度的一个很重要的方面(其他的包括变量的个数)。

对于任何规则的使用,都要记住:没有绝对的真理,也没有绝对的谬论。要具体情况具体分析,这才是设计的灵魂。

绝对的真理让我们盲从,绝对的谬论让我们偏执。

 

 

如何度量复杂度:

计算机子程序中决策点数量的技术

1、  1 开始,一直往下通过程序。

2、  一旦遇到以下关键字,或者同类的词,就加 1 if while repeat for and or

3、  case 中的每一种情况加 1

如何处理复杂度的度量结果:

1、  0 5 :子程序可能还不错。

2、  6 10 :得想办法优化。

3、  10+ :把子程序的某一部分拆分成另外一个子程序并调用它。

其他类型的复杂度:

1、  所用的数据量。

2、  控制结构中的嵌套层次。

3、  代码行数。

4、  对同一变量的先后引用之间的代码行数(跨度)。

5、  变量生存的代码行数(生存期)。

6、  输入输出的量

 

CHECKLIST: Control-Structure lssues

核对表:控制结构相关事宜

1、  表达式中用的是 TRUE FALSE ,而不是 0 1 吗?

2、  布尔值和 TRUE FALSE 作比较是隐式进行的吗?

3、  对数值做比较是显示进行的吗?

4、  有没有使用增加布尔变量,使用布尔函数和决策表来简化表达式?

5、  布尔表达式使用肯定形式表达的吗?

6、  括号配对码?

7、  在需要使用括号明确的地方都使用了括号了吗?

8、  把逻辑表达式全括起来了吗?

9、  判断是按照数轴顺序编写的吗?

10、              如果适当的话, Java 中的判断是 a.equals(b) ,而不是 a==b

11、              空语句表述的明显吗?

12、              用重新判断部分条件,转换成 if-else-case 语句、把嵌套代码提取成单独的子程序,换用一种更面向对象的设计或者其他的改进方法来简化嵌套语句了吗?

13、              如果一个子程序的决策点超过 10 个,那么能提出不重新设计的理由吗?

 

本章要点

1、  使布尔表达式简单可读,将有助于提高你的代码质量。

2、  深层次的嵌套使得代码难于理解,所幸的是,你可以相对容易的避免这么做。

3、  结构化编程是一种简单并且依然适用的思想,你可以通过把顺序、选择、循环三者结合起来而开发出任何程序。

4、  将复杂度降低到最低水平式编写高质量代码的关键。

 

本章重要的一点是,给出了几个度量子程序复杂度的方法。

 

你可能感兴趣的:(java,编程,c,优化,null,语言)