我很好奇我是否使用了太多的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语句,但我不确定他是否真实,我能理解为什么在某些情况下它会更慢或更糟,但我不确定。
提前致谢!!
答案 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)