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