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;因为它是。我会避免这种模式。重复的情况是完全不必要的,一些语言会完全呕吐在这上面。我会避免这种模式。重复的案例是完全不必要的,而且有些