Closed. This question is opinion-based。它当前不接受答案。












想改善这个问题吗?更新问题,以便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);
 }


然后,该新方法可能是确定如何更新循环变量的中心位置。

07-24 09:53
查看更多