in reply to Why I Hate Nested If-Else blocks
A guard clause prevents complete entry to a subroutine unless a condition is met. It is a special case of an if-else block, and (if you use them) an exception to the "single entry, single exit" rule imposed by structured programming.
A guard clause allows:
to be written asif ( ! ref $_[0] ) { return undef; } else { blah($_[0]); }
You see guard clauses all the time if you spend any time inside of standard modules like CGI.pm.return undef unless ref $_[0]; # guard clause blah($_[0]);
One of my standard refactorings for deeply nested code written by unrepentant structured programming purists is to reduce nesting by "pulling up" the guard clauses.
Update: I checked Martin Fowler's book Refactoring, and sure enough, he has a refactoring called "Replace Nested Conditional with Guard Clauses." He cites Kent Beck's 1997 book Smalltalk Best Practice Patterns, though Beck was codifying what was already a standard practice in the Smalltalk community.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Why I Hate Nested If-Else blocks
by mojotoad (Monsignor) on Jan 04, 2002 at 04:29 UTC |