If statement 我需要帮助压缩这个IF语句
我想提出更优雅的代码。我有以下声明:If statement 我需要帮助压缩这个IF语句,if-statement,code-formatting,boolean-logic,If Statement,Code Formatting,Boolean Logic,我想提出更优雅的代码。我有以下声明: if (( !mainFlag and form.opt1 == store.opt1 and form.opt2 == store.opt2 and form.opt3 == store.opt3 and form.opt4 == store.opt4 ) or ( mainFlag and form.opt1 == store.opt1 and form.opt2 == store.opt2 and
if (( !mainFlag and
form.opt1 == store.opt1 and form.opt2 == store.opt2 and
form.opt3 == store.opt3 and form.opt4 == store.opt4 ) or
( mainFlag and
form.opt1 == store.opt1 and form.opt2 == store.opt2 and
form.opt3 == store.opt3 and form.opt4 == store.opt4 and
form.opt5 == store.opt5 and form.opt6 == store.opt6 )){
dataHasBeenUpdated = False;
} else {
dataHasBeenUpdated = True;
}
if (
( form.opt1 == store.opt1 and form.opt2 == store.opt2 and /* */
form.opt3 == store.opt3 and form.opt4 == store.opt4 /* B */
)
and
( /* !A */
!mainFlag or (
form.opt5 == store.opt5 and form.opt6 == store.opt6 /* C */
)
)
)
dataHasBeenUpdated = False;
else
dataHasBeenUpdated = True;
基本上,我有许多字段需要检查,以查看它们是否已更新(opt1-4),但当mainFlag=true
时,我还需要检查另外两个字段
对于前四个opt#字段,我有两次相同的检查,这让我有点困扰。写这个IF语句的哪种更优雅/最简单的代码方式?我认为这应该足够简化它
dataHasBeenUpdated = ! (form.opt1 == store.opt1
and form.opt2 == store.opt2
and form.opt3 == store.opt3
and form.opt4 == store.opt4
and ( !mainFlag
or ( mainFlag
and form.opt3 == store.opt3
and form.opt4 == store.opt4 ) ));
让我们:
A = mainFlag
B = form.opt1 == store.opt1 and form.opt2 == store.opt2 and
form.opt3 == store.opt3 and form.opt4 == store.opt4
C = form.opt5 == store.opt5 and form.opt6 == store.opt6
其中A
,B
,C
是布尔变量。然后,您的IF
语句中包含以下布尔表达式:!A*B+A*B*C
简化后,该表达式将引导我们:
!A*B + A*B*C = B*(!A+A*C) = B*((!A+A)*(!A+C)) = B*(!A+C)
(!
、*
、+
分别是非、和和或的布尔运算符)
将其转换回您的IF语句:
if (( !mainFlag and
form.opt1 == store.opt1 and form.opt2 == store.opt2 and
form.opt3 == store.opt3 and form.opt4 == store.opt4 ) or
( mainFlag and
form.opt1 == store.opt1 and form.opt2 == store.opt2 and
form.opt3 == store.opt3 and form.opt4 == store.opt4 and
form.opt5 == store.opt5 and form.opt6 == store.opt6 )){
dataHasBeenUpdated = False;
} else {
dataHasBeenUpdated = True;
}
if (
( form.opt1 == store.opt1 and form.opt2 == store.opt2 and /* */
form.opt3 == store.opt3 and form.opt4 == store.opt4 /* B */
)
and
( /* !A */
!mainFlag or (
form.opt5 == store.opt5 and form.opt6 == store.opt6 /* C */
)
)
)
dataHasBeenUpdated = False;
else
dataHasBeenUpdated = True;
你这样说似乎很简单:)谢谢