我想简化一个代码片段,其中我有一个主循环,其中我放了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。
答案 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
}
}
虽然这种情况变得相当难以理解,甚至可能会变慢。