On Fri, Jun 13, 2014 at 10:15:59PM +0000, monarch_dodra via Digitalmars-d wrote: > On Friday, 13 June 2014 at 22:07:53 UTC, H. S. Teoh via Digitalmars-d wrote: > >>The very idea of a loop without a condition seems very, very wrong > >>to me. > > > >Why would it be "very, very wrong"? Perpetual cycles are ubiquitous > >in nature > > Hum... you guys seem to be forgetting about break statements. > > You know when you want to do something, and also do something > *between* each iteration, but don't want to check your end condition > twice per loop? It usually ends up looking something like this: > > T[] arr = ... ; > auto len = arr.length; > write("["); > if ( len != 0 ) { > size_t i = 0 > for ( ; ; ) { > write(arr[i]); > if (++i == len) break; > write(", "); > } > } > write("]");
I'm of the opinion that today's ubiquitous for/while/do loops are all defective caricatures of the "true" looping construct: loop { // body1 } while (condition) { // body2 } where body1 runs first, then the condition is checked, then body2 runs followed immediately by body1 again, etc.. Either body1 or body2 can be elided as needed, of course: // do-loop loop { // body1 } while(condition); // while-loop loop while(condition) { // body2 } // the real infinite loop ;-) loop { // body1 } // busy wait loop loop while (!externallySetFlag); And here's an example the full loop in action: write("["); if (!range.empty) { loop { writef("%s", range.front); range.popFront(); } while (!range.empty) { writef(", "); } } writeln("]"); The fact that this is the One True Loop is backed up by the necessity of %| in order to complete the functionality of %( and %) in std.format. %( and %) wouldn't be halfway as cool as they are, if %| didn't exist. T -- Questions are the beginning of intelligence, but the fear of God is the beginning of wisdom.