Re: Goto (Was Re: Open Source)
- Posted by Juergen Luethje <j.lue at ?mx.?e> Oct 23, 2007
- 772 views
I'm sorry for the delay in repleying. Fernando Bauer wrote: > Matt Lewis wrote: > > > > Juergen Luethje wrote: > > > > > > I do not make it a religion. Please do not put words into my mouth. > > > I just say that it's obsolete in high-level languages. This is of > > > course only true if a language provides sufficient other possibilities. > > > For instance in Euphoria, it would be useful not only to have an 'exit' > > > statement, but also the possibility to write something like > > > > > > exit <number of levels> > > > > I've often thought this, too, although that construct worries me. What > > happens if the levels change? Even if they don't change, it's not trivial > > to figure out the target of that exit. A label-based exit, OTOH, can be > > very useful, and explicit. > > > > For example, perl allows you to name a block (which could be a > > while/for/etc) > > and to use the next/last operators along with the block name: > > > > <a > > href="http://en.wikipedia.org/wiki/Perl_control_structures">http://en.wikipedia.org/wiki/Perl_control_structures</a> > > > > A euphorian implementation might look like: > > }}} <eucode> > > :mainloop for i = 1 to n do > > ... > > :jloop for j = 1 to m do > > .... > > if foo then > > exit :mainloop > > end if > > while foo > 5 do > > ... > > if bar then > > exit :jloop > > end if > > ... > > end for > > end for > > </eucode> {{{ > > That keeps the labels firmly associated with their proper loops. Matt, I agree that would be better than my proposal above. BTW: I vaguely recall now, that Derek had suggested something similiar some years ago, but I can't remember any details. > > It > > makes the goal very clear, although at the expense of clarity of where > > you're going: > > }}} <eucode> > > > > for i = 1 to n do > > ... > > for j = 1 to m do > > .... > > if foo then > > goto :mainloop > > end if > > while foo > 5 do > > ... > > if bar then > > goto :jloop > > end if > > ... > > end for > > :jloop > > end for > > :mainloop > > </eucode> {{{ > > I can see benefits to both ways, though I think I would prefer keeping > > them associated with the loop. It's also how exits work right now. > > > > Matt > > Or maybe, a more restricted solution that doesn't include labels: > exit <for-loop variable> > The for-loop variable would be optional. > > - Fernando This would not always work for 'while' loops. I'd prefer a generic solution that works for all kinds of loops. Regards, Juergen