Isn't this what a do-while loop is for, or am I missing something?

Well, yes, but then you don't need the regular "for" loop either. After all, isn't that what a "while" loop is for?

The big advantage of "for" is that you can see at a glance what the initialisation, condition(s) and increments are. It describes the whole loop in one statement. That's the only reason why it was invented in the first place, because the language technically does not need it. You can even declare the variable right there so its scope is limited to the loop. With a do-while, you first initialize the variable before the loop (outside of it), then add the increment just before the end (many pages later, perhaps), and the condition at the very end. It's all over the place.

foreach(i; 0..10)

I know my simple example would be optimized, and can indeed be written with a foreach as well. But if you use some custom class as the variable, or a pointer, it won't be. For example, turn i into a Bigint. Or for an entirely different example:

for (Display * d = firstDisplay; d != 0; d = nextDisplay)

if you have already established that at least one display is present.

Or even simpler:

for (int i = 1; i <= 0x10000000; i <<= 1)

I bet this won't be optimized on many compilers.

And all it would take is one extra semicolon:

for (Display * d = firstDisplay; ; d != 0; d = nextDisplay)
for (int i = 1; ; i <= 0x10000000; i <<= 1)

to tell the compiler to skip the condition before the first iteration.

for(initializer;;increment){
  if(!condition1) break;
   body;
   if(!condition2) break;
}

Yes, that's exactly what I meant.

Michel

Reply via email to