2012-11-14 48 views
0

这只是一个关于条件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

您标记PHP,JAVA,JavaScript的,C++,请花时间来问一个问题,做一个真正的冠军 – Ibu

+0

使用对象来隐藏它? –

+0

嵌套条件。 – Max

回答

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 
    } 

} 

两者之间的区别是轻微的,如果它使代码更清晰,您可以使用第一 - 也有一些语言会改变取决于变量的作用域声明的位置可能会影响您使用的位置。

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 
    } 
} 

这样,可变$myvar是接触到的一切外,如果块内。我并不完全了解PHP的范围规则,但在C++(语言最初标记为该语言)中,$myvar将不能在if块之外访问。

但是,在Javascript中,由于它的作用域规则,$myvar仍然可以在if块之外访问。

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) 

但是这主要是合作嗅觉,并且对运行时间影响很小。

+0

If这是JavaScript,你会愤怒那些堕落的Crockford虔诚的追随者。 ;) –

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; 
} 
+1

我会避免这种模式。重复的情况是完全不必要的,一些语言会完全禁用。 –

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 
} 
+0

恩......你看过[这个答案?](http://stackoverflow.com/questions/13384737/is-there-a-cleaner-way-to-structure-these-conditions#answer-13384821) – Ibu

+0

这是一个C唯一的答案 - 问题是语言不可知的。 – Hogan

+0

如果不间断,大多数语言都不会落入案例吗?我对绝大多数人并不熟悉,但我的解决方案可以用任何语言来实现,从而使交换机结构能够顺利通过。 (显然可能需要修改语法) –

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 
    } 
} 
相关问题