On 13 June 2014 04:04, Nick Sabalausky via Digitalmars-d <[email protected]> wrote: > On 6/12/2014 11:00 AM, Manu via Digitalmars-d wrote: >> >> I often find myself wanting to write this: >> foreach(; 0..n) {} >> In the case that I just want to do something n times and I don't >> actually care about the loop counter, but this doesn't compile. >> >> You can do this: >> for(;;) {} >> >> If 'for' lets you omit any of the loop terms, surely it makes sense >> that foreach would allow you to omit the first term as well? >> I see no need to declare a superfluous loop counter when it is unused. >> > > I can't imagine this has ever been a significant issue for anyone. But that > said, I certainly can't disagree with it, and wouldn't object to it. >
It gets awkward when you nest, using '_' leads to '__', and personally, I would expect an 'unreferenced variable' warning for the unused loop counter. I like warnings hassling me about unused variables. I also object to the inconsistency with for(;;). Recall Scott Myers talk... It's theoretically an optimisation too; capturing front may be a costly operation that's not required. Ranges maintain their counters internally, there's no reason to emit code to capture a local copy of 'front' if it's not used. popFront and empty don't imply a byVal copy, they usually just update range counters. I agree, it's trivial, just throwing it out there for opinion.
