【发布时间】:2010-09-14 11:22:03
【问题描述】:
在复习的时候,有时会遇到这样的循环:
i = begin
while ( i != end ) {
// ... do stuff
if ( i == end-1 (the one-but-last element) ) {
... do other stuff
}
increment i
}
那我问一个问题:你会写这个吗?
i = begin
mid = ( end - begin ) / 2 // (the middle element)
while ( i != end ) {
// ... do stuff
if ( i > mid ) {
... do other stuff
}
increment i
}
在我看来,这超出了编写循环的意图:你循环是因为每个元素都有一些共同的事情要做。使用此构造,您可以对某些元素执行不同的操作。因此,我得出结论,您需要为这些元素设置一个单独的循环:
i = begin
mid = ( end - begin ) / 2 //(the middle element)
while ( i != mid ) {
// ... do stuff
increment i
}
while ( i != end ) {
// ... do stuff
// ... do other stuff
increment i
}
现在我什至在 SO 上看到了一个 question,关于如何以一种很好的方式编写 if-clause...我很伤心:这里有些不对劲。
我错了吗?如果是这样,那么在编码时将循环体与特殊情况混在一起有什么好处?
【问题讨论】:
-
这一切都很棒。我可以改善我的个人工作风格。谢谢
-
“你循环是因为每个元素都有一些共同的事情要做。”这取决于“某事”的普遍程度。所有元素都是汽车可能很常见。有些是蓝色的,有些是红色的。如果是蓝色,则选择蓝色,如果是红色,则选择红色进行绘制。因此,在某个时刻,循环中的决策可能是有意义的。但在某些时候,很明显你应该拆分循环。
-
@peter_the_oak:我同意您根据在循环中遇到的值做出决定,而不是根据索引。
标签: language-agnostic loops for-loop while-loop control-structure