Coding style 如果条件是双重的,有没有办法缩短

Coding style 如果条件是双重的,有没有办法缩短,coding-style,if-statement,Coding Style,If Statement,我经常要做这样的事 if(condition1) { if {condition2) { //this condition is repeated again below //dosomething here 1 code 1 } else{ //dosomething here 2 code 2 } } else { if {condition2) {

我经常要做这样的事

    if(condition1) {
        if {condition2) { //this condition is repeated again below
          //dosomething here 1 code 1
        }
        else{
           //dosomething here 2 code 2
        }
    }
    else {
       if {condition2) { //same if condition as above 
             //dosomething here 3 code 3
       }
       else{
             //dosomething here 4 code 4
       }
    }
基本上,在这两种情况下,仅检查(条件2)是否重复,并且所有4个位置的剂量测量都不同,即代码1、代码2、代码3、代码4都是不同的代码

那么,有没有办法使它紧凑易读,或者这样就可以了

谢谢


经过编辑和查看答案后,我想知道这个问题是否有意义。我现在觉得自己很愚蠢。

对于您的具体情况,最好的选择是:

不再适用-适用于此处的剂量测定1与此处的剂量测定3相同的情况

if ( c2 )
{
}
else if ( c1 )
{
}
else
{
}
对于不太简单的情况,可以将条件组合在一起:

if ( c1 && c2 )
{
} 
else if ( c1 && !c2 )
{
} 
else if ( !c1 && c2 )
{
} 
else if ( !c1 && !c2 )
{
}
虽然我不知道这是否更具可读性

如果需要更多的条件,我见过这样的代码:

do {
   if (c1)
   {
      //....
      break;
   }
   if (c2)
   {
      //....
      break;
   }
   //.....
} while (false);

问题编辑后的新答案

if ( condition1 && condition2 )
{
  //dosomething here 1 code 1
} 
else if ( condition1 && !condition2 )
{
  //dosomething here 2 code 2
} 
else if ( !condition1 && condition2 )
{
  //dosomething here 3 code 3
} 
else
{
  //dosomething here 4 code 4
}
以下代码不再有效,因为问题已更改

我会:

if(condition2)
{
   if(condition1)
   {
     //dosomething here
   }
   else
   {
     //dosomething here 2, 
     //which might be different than what we are doing above
   }
}

这是针对您的具体问题,对于更复杂的问题,解决方案可能会有所不同。。。如果两个分支中的代码相同,为什么需要第一个if?对不起,如果不清楚,我现在更新了问题。基本上,我是在两个地方检查相同的条件2,所以我认为有一些方法可以避免重复检查。在这两种情况下,条件2的其他部分是相同的吗?在那些else语句中是否确实有代码(如果没有,为什么它们甚至在那里?)。这个问题的答案对优化的效果有很大的影响……老实说,我看不出任何一个建议的替代方案比原始代码更清晰。但这并不意味着这是一个愚蠢的问题。我以前对此很好奇,因为我偶尔会看到这样写的代码。我不知道这个问题是否发生了变化,但您的第一个示例似乎不一样。。。如果c2是真的,那么你忽略了c1的状态,而原来的帖子没有。编辑/注意:我没有在else块中看到最新的代码更新,在这种情况下,它肯定不匹配。;-)@克里斯:问题确实变了,做点什么1和3与原来的一样。@克里斯:是的,问题变了。第二个选项(当我键入此选项时)似乎是最明智的重构,但我不认为平坦的if/elseif类型结构比原始结构更具可读性。如果需要重构,我会一直这样做。。虽然有中断,但我个人会坚持原样,因为我认为缺少否定和显式布尔逻辑使它更容易理解。@Chris ergo评论“尽管我不知道这是否更可读。”。我同意,对于这个案子,我会坚持op已经有的东西。对于更多的条件,我会选择后者。谢谢@Chris,我根据编辑后的问题编辑了我的答案。