Single-exit actually used to be standard practice, back in the days of
"structured programming". I'm surprised to see it's still around, but I
suppose AT&T has a point - in procedural languages, if you have multiple
returns in a function, you *could* forget to release the appropriate
resources each time. And C++, which has no GC, isn't immune to that.
Personally, I've never had a problem forgetting to release the right
resources, because any time I cut and paste a return statement, I copy the
whole block above it too that releases all the resources. Easy.
I much prefer what I call "straight line" programming - keep on exiting at
errors. It's the difference between this:
···
On Sat, 20 Oct 2007 18:56:20 +0900, Alex Young wrote:
On Sat, 2007-10-20 at 09:23 +0900, Pat Maddox wrote:
I concur. There's nowhere that says that functions should have just one
exit - it doesn't necessarily make for bad style, or code noise.
error, section 4.13.2, Return
Types and Values:
----
if file_exists
if open
if lines_to_read
if read_doesnt_fail
if not_a_comment
process_line
end
else
log_an_error
close_the_File
end
else
log_were_done
close_the_file
end
else
log_an_error
end
else
log_an_error
end
----
and this:
----
unless file_exists
log_an_error
return
end
unless open
log_an_error
return
end
unless lines_to_read
log_were_done
close_the_file
return
end
unless read_doesnt_fail
log_an_error
close_the_file
return
end
if not_a_comment
process_line
end
----
Which would YOU rather maintain? For one thing, I didn't even realize I
forgot to create a loop to read the file until I got through refactoring it
into the second form. To me, the readability makes it less likely, not
more, that I will forget to release resources.
And if you're really worried about it, you can always wrap a function that
DOES have early returns inside a function that doesn't, and give the
responsibility for resource management to the outer function. I've done
that a lot.
I've seen programs (this week!) in the first form where the routine is
hundreds of lines. If you don't have a code-folding editor, it's nearly
impossible to figure out what the logic really is, and where the if/elses
match up. Doubly so on an 80x25 non-resizable screen where all the indents
make the lines impossibly short.
--
Jay Levitt |
Boston, MA | My character doesn't like it when they
Faster: jay at jay dot fm | cry or shout or hit.
http://www.jay.fm | - Kristoffer