background image

 

// 究竟是忘了写呢,还是根本不会发生 else 的情况呢?这里无法判断

 

 

 

  补充说明:使表达式更容易理解的方法 以及 返回真假值方法的注意点
  在编写表达式时同时编写多个表达式,从中选择一个最容易理解的即可。
  有些条件是可以用多个表达式来编写的。例如下面这两个表达式是等价的。

 

  ①

if

 (x != 1 || x != 2)

 

  ②

if

 (! (x == 1 && x == 2))

  对于①来说,很难一眼就断定是个 Bug

 

。但是, ②呢,一眼就可以看出来 x 等于 

1,并且等于 2”是个 Bug。
  下面,设想一下返回真假值的情况。这时,如果做一个方法,当 P 为真时返回一个假

的话,就成了 没有不是 P

的情况 的二重否定,很容易导致解释时的混乱。因此,即使想

要检查的条件是 P 的否定,也最好先写一个判定 P

的方法,在调用的时候用

if

 (! 

isActive())…”这样的否定形来判断。
  利用真值表来整理各种条件及其取值

 

  条件表达式 C: ( x > 0 ) && (( y < z ) || !( z == x))
  X > 0Y < ZZ == X 评价值
  TTTT
  TTFT
  TFTF
  TFFT
  FTTF
  FTFF
  FFTF
  FFFF
  注:图中的记号
  T … 真
  F … 假
  针对整数 x,y,z,有三个命题(x > 0,y < z,z == x),满足条件式 C 的是本真值表中评价
值为真的那些行。通过判断评价值为真的行各命题的真伪,就可以按三个命题被分解的形
式确认条件式 C

 

是否表达了我们的的意图。 另外,为了编写

else

 

if

 

 

或者

else

语句,从而

避免条件遗漏时,只要针对评价值为假的行编写条件表达式即可。

 

  参考:布尔操作符 && ,|| 的右边不允许包含有带有副作用(#)的表达式
  &&,||是布尔操作符,右边的操作数并不一定每次都被判断

 

  ① x && y 的情况,当 x 为 false 时,y 将不被判断

 

  ② x || y 的情况,当 x 为 true 时,y 将不被判断
  因此,对 y(右侧操作数)有副作用的表达式是不允许包含的。
  # 使运行环境发生变化的作用。有代表性的例子是变量值的变化,文件读写等。