Steve McConnell 的清单项目之一是您不应该胡乱使用循环索引(第 16 章,第 25 页,循环索引,PDF 格式)。
这很直观,并且是我一直遵循的一种做法,除非我当时学会了如何编程。
在最近的一次代码审查中,我发现了这个尴尬的循环,并立即将其标记为可疑。
for ( int i=0 ; i < this.MyControl.TabPages.Count ; i++ )
{
this.MyControl.TabPages.Remove ( this.MyControl.TabPages[i] );
i--;
}
这几乎很有趣,因为它设法将索引保持为零,直到所有 TabPages 都被删除。
这个循环可以写成
while(MyControl.TabPages.Count > 0)
MyControl.TabPages.RemoveAt(0);
而且由于控件实际上与循环几乎同时编写,它甚至可以写成
MyControl.TabPages.Clear();
从那以后,我就代码审查问题受到了挑战,并发现我对为什么这是不好的做法的表述并不像我希望的那样有力。我说过更难理解循环的流程,因此更难维护和调试,最终在代码的生命周期内成本更高。
有没有更好的说明为什么这是不好的做法?