使用太多 'if' 语句是不是编程不好?

Is using too many 'if' statements bad programming?

我很好奇我是否使用了太多 if/else if 语句。 我正在使用 javascript 编写一个井字游戏程序,并确定计算机是否应该阻止播放器我正在使用大约 9 个 if 语句,并且在确定是否连续有 3 个时我使用大约 9 个。

例如:

if(r1c1V === xOrO && r1c2V === xOrO && r1c3V === xOrO)
{
    is3InARow = true;
}
else if(r2c1V === xOrO && r2c2V === xOrO && r2c3V === xOrO)
{
    is3InARow = true;
}
else if(r3c1V === xOrO && r3c2V === xOrO && r3c3V === xOrO)
{
    is3InARow = true;
}
.
.
.
.

等等。

所以我的问题是,我是否使用了太多 if 语句?还是没有更好的方法来做到这一点? 我的朋友告诉我,我真的不应该使用那么多 if 语句,但我不确定他是否属实,我可以理解为什么在某些情况下它会变慢或变坏,但我不确定。

提前致谢!!

在这些情况下,我们使用“Recursion”。

回答您的问题;如果你使用了很多 if 语句,那说明你做错了什么。您可以使用其他方法来达到您想要的目标。

示例: 你有一个 2,2 的网格(0,1,2 和 0,1,2)。所以你应该做的是创建一个计算分数的算法。一个非常流行的是MiniMax

我想使用太多 if-else 语句会降低 program.You 的可读性可以使用 switch-case 语句而不是使用 if-else statements.Just google switch-case javascript 您将获得许多有用的链接以了解它。

在你的场景中,一点也不差。 如果可以的话,您可以在代码中添加 return,这样它就不会执行其他条件...只要在您的场景中可能就可以了。

没有硬性规定。请记住,&&|| 短路的 ,这意味着一旦结果已知,评估就会停止。那以及您能够以任何您喜欢的方式对 if 语句进行排序的事实意味着您可以通过首先考虑频繁比较来优化事情。

总是做最清晰的事情,如果性能很重要,那就是最快的。

编程就是自动化流程。你不会听到我说你这样做的方式是错误的。如果它有效,那就没关系。当然,如果你能找到一种方法让它自动检查所有内容,那当然会更漂亮。就像遍历所有 x 线并检查是否所有这些都被选中。这可能不会更容易,但会更具扩展性。如果您希望在十乘十的网格上玩游戏。那么你只需要说那是字段的大小。现在您需要添加所有其他代码行。

一般来说,是的,"too many" 如果是不好的。任何问题都可以只使用 ifs 来解决,但是你周围看到的一切,函数式编程、递归、对象建模,都可以阻止 if 失去控制并给你留下难以理解的庞大代码。您应该更担心嵌套 if 的深度而不是序列的长度。如果你想看到真正的聪明,这里是 tic-tac-toe 罗塞塔代码。

这是相当主观的,因此对于 Stack Overflow 来说并不是很理想。

您的朋友可能暗示的是,使用长 if/else 语句、嵌套 if 等的程序有时难以维护,而且可读性并不总是很好。有时您可以将长 if 语句替换为单独的函数,这样更易​​于维护。

例如在井字游戏中:

function checkRow(rowToCheck){
    if (rowToCheck[0] === rowToCheck[1] && rowToCheck[1] === rowToCheck[2]){
        return true;
    } else {
        return false;
    }
}

并不是说这是完美的甚至是好的代码,但您可以看到它如何让您减少代码中 if 语句的数量。可以进一步考虑:

function checkRow(rowToCheck){
    var allMatch = true;
    for (var i=0;i<rowToCheck.length && allMatch;i++){
        allMatch = rowToCheck[i] === rowToCheck[0];
    }
    return allMatch;
}

这允许不同长度的行,并减少了 if 语句。无论如何,我希望这能解释一些您可以删除 if 语句的方法。


编辑

将来,我建议还有另一种更好的方法来检查行中元素的相等性:

const o = 'o'
const x = 'x'

const rows = [
  [o, x, x],
  [x, x, x],
  [o, o, x]
]

const rowIsEqual = row => !row
  .some(square => square !== row[0])
  
const results = rows.map(rowIsEqual)
  
console.dir(results)

这么多应用程序都是用很长的 if then else 语句构建的?为什么?字典不是更好吗?查找关键字并执行相关操作。我很惊讶我找不到一个简单的 python 库来为包括数据库在内的多个后端执行此操作。