PROPOSAL: Enhanced for each loop iteration control

Bruce Chapman brucechapman at paradise.net.nz
Wed May 6 02:45:30 PDT 2009



> I don't understand what you mean by "breaking on nested loops". Support for nested loops is why I suggested "#foo" instead of just "#"... the specification use of the loop variable indicates the nesting level. For instance, you could do something like:
>
> for (Thing foo : whatever) {
>     for (Thing bar : whateverElse) {
>          doSomethingWith(foo, bar, #foo, #bar);
>     }
> }
>
> Derek
>
>
>   
I am not really excited about this proposal, but I just had this thought 
for a possible syntax.

The idea is to hybridize the for-each and conventional for syntax, but 
you don't need the (stopping) expression from conventional syntax 
(foreach does that), but you could include the initializing portion and 
updating portion like this

HybridForStatement

	for ( /VariableModifiers_opt  Type Identifier /: Expression ; /ForInit_/opt/ / //; /ForUpdate_/opt/ / ) /Statement

Then to do an indexed loop you could write
/

for (Thing foo : whatever; int i=0; i++) {
    for (Thing bar : whateverElse; int j=0; j++ ) {
         doSomethingWith(foo, bar, i, j);
    }
}

but it's not that much different than what you can do (irrespective of the exotic formatting) already

int i=-1; for (Thing foo : whatever) { i++;    
     int j=-1; for (Thing bar : whateverElse ) { j++;
         doSomethingWith(foo, bar, i, j);
    }
}


Bruce




More information about the coin-dev mailing list