Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
Improve this question
我正在阅读其他人的代码,他们分别在循环内递增其for循环计数器,并包括通常的事后思考。例如:
基于其他人已编写和阅读的大多数代码,我是否应该期望看到这一点?
遵循该原理要求您将
但是除此之外,在某些情况下,您的示例可能会产生“某些情况”。但是对于那些情况-为什么不使用while循环呢?
换句话说:使您的示例复杂而令人困惑的是,代码的两个不同部分更改了您的循环计数器。因此,另一种方法可能类似于:
然后,该新方法可能是确定如何更新循环变量的中心位置。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
Improve this question
我正在阅读其他人的代码,他们分别在循环内递增其for循环计数器,并包括通常的事后思考。例如:
for( int y = 4; y < 12; y++ ) {
// blah
if( var < othervar ) {
y++;
}
// blah
}
基于其他人已编写和阅读的大多数代码,我是否应该期望看到这一点?
最佳答案
在for循环中操作循环计数器的做法并不十分普遍。这会让许多阅读该代码的人感到惊讶。让读者感到惊讶并不是一个好主意。
循环计数器的其他操作会给代码增加大量的复杂性,因为您必须牢记其含义以及它如何影响循环的整体行为。如Arkady所述,它使您的代码难以维护。
简单地说,避免这种模式。当您遵循“简洁的代码”原则,尤其是single layer of abstraction (SLA)原则时,没有这样的事情
for(something)
if (somethingElse)
y++
遵循该原理要求您将
if
块移至其自己的方法中,从而难以在该方法中操作某些外部计数器。但是除此之外,在某些情况下,您的示例可能会产生“某些情况”。但是对于那些情况-为什么不使用while循环呢?
换句话说:使您的示例复杂而令人困惑的是,代码的两个不同部分更改了您的循环计数器。因此,另一种方法可能类似于:
while (y < whatever) {
...
y = determineY(y, who, knows);
}
然后,该新方法可能是确定如何更新循环变量的中心位置。