Idea: break/continue and scope guards

BCS BCS at pathlink.com
Fri Jul 6 13:13:05 PDT 2007


Derek Parnell wrote:
> On Fri, 06 Jul 2007 11:03:04 -0700, BCS wrote:
> 
> 
>>mike wrote:
>>
>>>Hi!
>>>
>>>Don't know if that makes any sense or if it would be of any use, but I had an idea lately and wanted to share it here, maybe it's some little thing that could be nice in D.
>>>
>>>So here we go:
>>>
>>>' foreach (customer; customerList)
>>>' {
>>>'     foo(customer);
>>>'     scope(failure) foo_rollback(customer);
>>>'
>>>'     bool ok = check_valid_after_foo(customer);
>>>'     if (!ok) continue(failure);
>>>'
>>>'     commit(customer);
>>>' }
>>>
>>>Basically the idea is to trigger the appropriate scope guards when a break or continue occurs. Another thing where this could be handy is in situations where you loop over an array to search for a specific item and do something when it is found, like:
>>>
>>>' foreach (customer; customerList)
>>>' {
>>>'     scope(success) result = customer;
>>>'     if (customer.ID == wantedID) break(success);
>>>' }
>>>
>>>What do you think?
>>>
>>>-mike
>>
>>[posted in D and D.announce NG, please reply in D ng]
>>
>>This is much like an idea I had, but backwards from the way I thought of 
>>it. Add more options to scope, not break/continue.
>>
>>the second code example would work like this the way I thought of.
>>
>>' foreach (customer; customerList)
>>' {
>>'     scope(break) result = customer;
>>'     if (customer.ID == wantedID) break;
>>' }
>>
>>other scope "types":
>>goto            // exit by goto
>>goto : label    // exit by goto to a given label
>>continue        // duh
>>enter           // execute on entrance by any means (goto, switch, etc.)
>>out             // used in a loop same as exit but for scope including
>>                 // loop. Note: scope(exit) in a loop runs on each cycle,
>>                 // 'out' would only run at the end of the last cycle.
> 
> 
> I like this too. I think scope(next) rather than scope(exit) though.
> 
how about both?
next: run after conditional passes and first pass through loop
out: as described above
exit: union of next and out



More information about the Digitalmars-d mailing list