Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
Another common way to reduce nesting (and, in some cases, to eliminated nested if-else blocks) is to use guard clauses.

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:

if ( ! ref $_[0] ) { return undef; } else { blah($_[0]); }
to be written as
return undef unless ref $_[0]; # guard clause blah($_[0]);
You see guard clauses all the time if you spend any time inside of standard modules like CGI.pm.

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.


In reply to Re: Why I Hate Nested If-Else blocks by dws
in thread Why I Hate Nested If-Else blocks by jeffa

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2024-04-24 06:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found