// 究竟是忘了写呢,还是根本不会发生 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(右侧操作数)有副作用的表达式是不允许包含的。
# 使运行环境发生变化的作用。有代表性的例子是变量值的变化,文件读写等。