Language agnostic 有没有更简洁的方法来构造这些条件句?

Language agnostic 有没有更简洁的方法来构造这些条件句?,language-agnostic,if-statement,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

这只是一个关于条件
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
时,我才想声明该变量,并在其他两个条件下访问它。有人能想出另一种(可能更干净的)方法吗

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
  }

}
这两种语言之间的差别很小,如果第一种语言使代码更清晰,您可以使用第一种语言。另外,一些语言会根据变量的声明位置更改变量的范围,从而可能影响您使用的变量

或者更好

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
  }

}

这两种语言之间的差别很小,如果第一种语言使代码更清晰,您可以使用第一种语言。此外,一些语言会根据变量的声明位置更改变量的范围,从而可能影响您使用的变量。

您可以尝试以下操作:

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++(语言最初被标记)中,<代码> $MyVa/Cux>在IF块之外是不可访问的。< /P>
但是,在Javascript中,由于其作用域规则,
$myvar
仍然可以在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
    }
}
这样,外部if块中的所有内容都可以访问变量
$myvar
。我不完全确定PHP的范围规则,但是在C++(语言最初被标记)中,<代码> $MyVa/Cux>在IF块之外是不可访问的。< /P>
然而,在Javascript中,由于其作用域规则,
$myvar
仍然可以在if块之外访问。

在不知道具体要求的情况下,您确实没有太多的工作要做来改进它

根据您的要求:

您可以尝试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;
}

可以改为

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

但这只是表面上的,对运行时的影响很小。

在不知道具体要求的情况下,要改善这一点,你真的没有太多的事情要做

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;
}
根据您的要求:

您可以尝试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;
}

可以改为

else if(a == 2 || a == 3)
但这主要是装饰性的,对运行时的影响最小。

反向操作:

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;
}
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
   }
}
if(a<1|a>3)
{ 
返回;
}
其他的
{
var$myvar=10;
如果(a==1)
{
风险价值总额=$myvar+1;
//做a==1件事
}
其他的
{
总计=$myvar+1;
//做a==2或a==3的事情
}
}
反向操作:

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
   }
}
if(a<1|a>3)
{ 
返回;
}
其他的
{
var$myvar=10;
如果(a==1)
{
风险价值总额=$myvar+1;
//做a==1件事
}
其他的
{
总计=$myvar+1;
//做a==2或a==3的事情
}
}

>你标记了PHP、java、JavaScript、C++,请花时间问一个问题,并在A.@米迦勒上用一个切换语句做一个真正的标题,如果这是无法回答的。作用域在所有语言上的工作方式不同。我猜是JavaScript。我可能会做一个Var total=$myvar+11;。您的代码似乎工作正常(取决于所使用的上下文)。如果你想要的意见,也许使用。USSR76368,你喜欢你用这个标签来标注这个问题的四种语言中的任何一种吗?你贴上了PHP、java、JavaScript、C++,请花时间问一个问题,并在A.@米迦勒上用一个开关语句来表示一个真正的标题。作用域在所有语言上的工作方式不同。我猜是JavaScript。我可能会做一个Var total=$myvar+11;。您的代码似乎工作正常(取决于所使用的上下文)。如果你想发表意见,那么可以改用。user765368,你喜欢你为这个问题添加标签的四种语言中的任何一种吗?如果这是JavaScript,你会因为这些错误而激怒Crockford的虔诚追随者。;)如果这是JavaScript,你会因为这些失败而激怒Crockford的虔诚追随者嗯。。。你看过这是一个只有C语言的答案了吗?这个问题是语言不可知论的。大多数语言如果没有中断,不是都会失败吗?我对绝大多数人都不太熟悉,但我的解决方案适用于任何让交换机结构失效的语言。(显然可能需要修改语法)@DoraBall-no大多数语言都不这样做。C和C++做的——C,不,java把它拿出来了——它是一个可怕的“特性”,花费了数百万美元,因为把一个简单的元素(中断)排除在一起并不会被当作一个错误而被捕获,而是导致一个bug。在C#中,可以添加goto语句以获得相同的效果。这就是为什么我说你的答案只有C;因为它是。嗯。。。你看过这是一个只有C语言的答案了吗?这个问题是语言不可知论的。大多数语言如果没有中断,不是都会失败吗?我对绝大多数人都不太熟悉,但我的解决方案适用于任何让交换机结构失效的语言。(显然可能需要修改语法)@DoraBall-no大多数语言都不这样做。C和C++做的——C,不,java把它拿出来了——它是一个可怕的“特性”,花费了数百万美元,因为把一个简单的元素(中断)排除在一起并不会被当作一个错误而被捕获,而是导致一个bug。在C#中,可以添加goto语句以获得相同的效果。这就是为什么我说你的答案只有C;因为它是。我会避免这种模式。重复的情况是完全不必要的,一些语言会完全呕吐在这上面。我会避免这种模式。重复的案例是完全不必要的,而且有些