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;

你这样说似乎很简单:)谢谢