是否有更简洁的方法来构建这些条件?

时间:2012-11-14 18:13:17

标签: language-agnostic if-statement

这只是关于条件if的基本编程问题。假设我有类似的东西:

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
}

if(a == 1)
{
   var total = $myvar + 1;
   // do stuff if the value of a is 1
}

if(a == 2 || a == 3)
{
   var total = $myvar + 1;
   // do stuff if the value of a is either 2 or 3
}

我在上面的代码中尝试做的很清楚。如您所见,我们在这里有一些共同的条件(例如,a == 1在3个条件中的2个中很常见)。另外,请注意我有一个变量$myvar,我希望仅在a == 1 || a == 2 || a == 3时声明它,并在我的其他两个条件中访问它。任何人都可以想到另一种(可能更清洁)的方式吗?

6 个答案:

答案 0 :(得分:4)

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
  if(a == 1)
  {
     var total = $myvar + 1;
     // do stuff if the value of a is 1
  }
  else
  {
     var total = $myvar + 1;
     // do stuff if the value of a is either 2 or 3
  }

}

或更好

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3
   var total = $myvar + 1;

  if(a == 1)
  {
     // do stuff if the value of a is 1
  }
  else
  {
     // do stuff if the value of a is either 2 or 3
  }

}

两者之间的区别很小,如果它使代码更清晰,你可以使用第一个 - 也有些语言会根据声明的位置改变变量的范围,这可能会影响你使用它。

答案 1 :(得分:2)

在不知道具体要求的情况下,你真的没有太多可以做的改进。

取决于您的要求:

您可以尝试使用switch语句

switch(a)
{
    case 1:
    case 2:
    case 3:
        //logic for if a is 1, 2, or 3
    break;
    default:
        //if a is something else
    break;
}

if(a == 2 || a == 3)

可以更改为

else if(a == 2 || a == 3)

但这主要是装饰性的,对运行时影响很小。

答案 2 :(得分:0)

您可以尝试以下内容:

if(a == 1 || a == 2 || a == 3)
{
   var $myvar = 10;
   // do stuff if the value of a is either 1, 2 or 3

   if(a == 1)
    {
       var total = $myvar + 1;
       // do stuff if the value of a is 1
    }

    if(a == 2 || a == 3)
    {
       var total = $myvar + 1;
       // do stuff if the value of a is either 2 or 3
    }
}

这样,外部if块内的所有内容都可以访问变量$myvar。我不完全确定PHP的范围规则,但在c ++(该语言最初标记为)中,$myvar将无法在if块之外访问。

但是,在Javascript中,由于其范围规则,$myvar 仍然可以在if-block之外访问。

答案 3 :(得分:0)

var $myvar=0,total=0;
switch(a){
    case 1:
    case 2:
    case 3:
        $myvar = 10;
    case 1:
        total =$myvar + 1;
        break;
    case 2:
    case 3:
        total = $myvar + 1;
        break;
}

答案 4 :(得分:0)

switch (a){
    case 1:
         do stuff;
         //DONOTBREAK HERE
    case 2:
    case 3:
         if(a== 2 || a == 3){
              //do stuff exclusive to 2 and 3
         }
         //do stuff universal to 1,2,3
         break;
    default:
       //failing case
}

答案 5 :(得分:0)

向后做:

if (a < 1 || a > 3)
{ 
   return;
}
else
{
   var $myvar = 10;
   if (a == 1)
   {
      var total = $myvar + 1;
      // do a == 1 stuff 
   }
   else
   {
      total = $myvar + 1;
      // do a == 2 or a == 3 stuff
   }
}