goto a no-go?
qznc
qznc at web.de
Tue Oct 1 04:36:13 PDT 2013
On Tuesday, 1 October 2013 at 11:22:12 UTC, Chris wrote:
> Just a short question. Usually goto statements are frowned upon
> as being bad programming style (in textbooks at least). D has
> it (thankfully) and I've used it, albeit sparingly. Sometimes
> goto is simply the best and most efficient solution within a
> code block (to avoid code duplication, unnecessary checks or
> redirecting to yet another function blah blah). Is it ok or
> even necessary to use goto in D? Or does the compiler recognize
> _obvious_ cases and generate code accordingly? For example
> would it turn something like this
>
> // ...
> if (word.length == 1) {
> // format output
> return output;
> } else if (word.length > 1) {
> // do some additional processing
> // format output
> return output;
> }
>
> into
>
> // ...
> if (word.length == 1) goto FormatOutput;
>
> // if word.length > 1, some extra work has to be done
> // initialize some variables, parse, do some processing etc.
>
> FormatOutput:
> // .....
>
> return output;
How is that transformation an optimization or improvement?
Substituting "return output" for "goto FormatOutput" is not
better. So, I assume "// format output" is the code duplication
you want to remove? Well, your example should also work like this:
if (word.length > 1) {
// do some additional processing
}
// format output
return output;
Regarding goto and D, scope guards [0] are good for removing
gotos, because the cleanup-after-error code can be moved.
[0] http://dlang.org/statement.html#ScopeGuardStatement
More information about the Digitalmars-d
mailing list