是否使用了太多'if'语句编程错误?

时间:2015-11-26 09:22:10

标签: javascript if-statement tic-tac-toe

我很好奇我是否使用了太多的if / else if语句。 我正在使用javascript编写一个tic-tac-toe程序,并确定计算机是否应该阻止我使用的播放器大约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语句,但我不确定他是否真实,我能理解为什么在某些情况下它会更慢或更糟,但我不确定。

提前致谢!!

8 个答案:

答案 0 :(得分:9)

这是相当主观的,所以对Stack Overflow来说并不是很理想。

你的朋友可能建议的是,使用long if / else语句,嵌套ifs等的程序有时难以维护,并且并不总是非常易读。有时,您可以使用单独的函数替换long if语句,这样可以更容易维护。

例如在tic-tac-toe:

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)

答案 1 :(得分:2)

编程就是自动化流程。你不会听到我说你这样做的方式是错误的。如果它工作,那么它是oke。但是,如果你能找到一种让它自动检查所有东西的方法,那当然会更漂亮。就像循环所有x线一样,只检查是否所有这些都被检查过。这可能并不容易,但它会更加可扩展。如果您希望以10乘10格的方式玩游戏。那么你只需要说那是场的大小。现在你需要添加所有其他代码行。

答案 2 :(得分:1)

没有严格的规则。请注意,&&|| 短圈意味着一旦结果已知,评估就会停止。这个以及您能够以任何方式订购if语句的事实意味着您可以通过首先考虑频繁的比较来优化事物。

始终做最清楚的事情,如果表现至关重要,那么最快的是什么。

答案 3 :(得分:0)

我想使用太多if- else语句会降低程序的可读性。你可以使用switch-case语句而不是使用if-else语句。只需在javascript中使用google switch-case,你就可以获得许多有用的链接来获取关于它的想法。

答案 4 :(得分:0)

在你的场景中,它一点都不差。 您可以在代码中添加return,以便它不会执行其他条件...只是在您的方案中可能。

答案 5 :(得分:0)

总的来说,是的,&#34;太多&#34;如果不好。任何问题都可以使用ifs来解决,但是你所看到的一切,函数式编程,递归,对象建模,都可以阻止if失控并让你留下庞大的难以理解的代码。你应该更担心嵌套ifs的深度而不是序列的长度。如果您希望看到真正的聪明,请点击此处了解tic-tac-toe rosetta代码。

答案 6 :(得分:0)

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

答案 7 :(得分:-2)

在这些情况下,我们使用&#39; Recursion&#39;。

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

实施例: 你有一个2,2(0,1,2和0,1,2)的网格。所以你应该做的是创建一个计算得分的算法。一个非常受欢迎的是MiniMax