将2个if语句简化为循环

时间:2015-12-02 15:29:33

标签: javascript algorithm if-statement simplify

我想简化一个代码片段,其中我有一个主循环,其中我放了2个if语句。第一个if语句是关于测试“if (test1 or test2)”,第二个是测试“if (test1 and test2)”。

当然,为了区分它们,我必须放在更高的水平(但仍然在主循环中)另一个“如果”(在diagExpression boolean上进行测试,见下文);这是代码:

// Main loop 
  while (Hit.arrayCurrent[Hit.coordCurrent[0]+k][Hit.coordCurrent[1]+l] == Hit.currentPlayer[1]) 
  {   
   if (diagExpression)
     {   
      if ((a > b) || (b > c))
        return;
      else if (d)
       {   
        //do stuff1
       }   
     }   
  else
    {   
     if ((a > b) && (b > c))
        return;
     else if (d)
       {   
        //do stuff1
       }   
     }   
  }

我不知道如何简化此代码段并避免使用stuff1 2次。

如果有人能看到解决方案。

更新:

在主循环之前计算

diagExpression

// Boolean for 2 versions
  var diagExpression = false;

  if (Hit.direction == 'rightbottom')
    { 
      diagExpression = true;
      shift_x = 1;
      shift_y = 1;
      factor_x = 1;
      factor_y = 1;
      limit_x = 7;
      limit_y = 7;
    }
 else if (Hit.direction == 'left')
    {
      shift_x = -1;
      shift_y = 0;
      factor_x = -1;
      factor_y = 1;
      limit_x = 0;
      limit_y = -1;
    }

...

// Main loop 
  while (Hit.arrayCurrent[Hit.coordCurrent[0]+k][Hit.coordCurrent[1]+l] == Hit.currentPlayer[1])

我在代码中使用不同的方向值,如果我有对角线方向,则该布尔值为true,垂直/水平方向为false。

2 个答案:

答案 0 :(得分:0)

您可以这样使用:

Configuration

这就是我认为@Daniel Daranas的意思。

答案 1 :(得分:0)

首先,您可以简化代码,以便只需编写 stuff1 一次:

while (…) {   
  if (diagExpression) {  
    if ((a > b) || (b > c))
      return;
  } else {
    if ((a > b) && (b > c))
      return;
  }
  if (d) {
    // do stuff1
  }
}

甚至

while (…) {   
  if (diagExpression ? (a > b) || (b > c) : (a > b) && (b > c)) {
    return;
  } else if (d) {
    // do stuff1
  }
}

然后你可以找到更高级的东西,比如

while (…) {   
  if ((a > b) + (b > c) >= 2 - diagExpression) {
    return;
  } else if (d) {
    // do stuff1
  }
}

虽然这种情况变得相当难以理解,甚至可能会变慢。