Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^3: Automatically add all defined functions to your @EXPORT

by dragonchild (Archbishop)
on Jun 21, 2005 at 14:37 UTC ( [id://468694]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Automatically add all defined functions to your @EXPORT
in thread Automatically add all defined functions to your @EXPORT

This is an interesting style difference. I prefer putting one very specific item per map or grep. I find it makes both comprehension and maintenance easier in the long run. Maybe, this is a meditation in the making?

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
  • Comment on Re^3: Automatically add all defined functions to your @EXPORT

Replies are listed 'Best First'.
Re^4: Automatically add all defined functions to your @EXPORT
by BrowserUk (Patriarch) on Jun 21, 2005 at 15:03 UTC
    I prefer putting one very specific item per map or grep.

    I don't get the logic of this. (That doesn't mean you should change it, I'd just like to understand it).

    You (probably) wouldn't code:

    if( $var == 1 ) { doSomething(); } if( $var == 1 ) { doSomethingElse(); }

    Instead of

    if( $var == 1 ) { doSomething(); doSomethingElse(); }

    Or

    if( $var1 == 1 ) { if( $var2 == 2 ) { doSomething(); } }

    In preference to

    if( $var1 == 1 && $var2 == 2 ) { doSomething(); }

    (would you?).

    So why the difference about combining the conditional in grep?


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
      if( $var1 == 1 ) { if( $var2 == 2 ) { doSomething(); } }
      In preference to
      if( $var1 == 1 && $var2 == 2 ) { doSomething(); }
      (would you?).

      Actually, I quite often find that the first of these two is exactly what I want as it makes what I'm doing much more clear. Othertimes, I use the latter. It really depends on whether the two tests are related or not, as well as whether there are other things I want to do in the $var==1 case but only if $var2!=2.

      So I often find myself writing a grep of a grep. Or a grep of a map of a map of a grep. Or a map of a grep of a grep. Or ... when a single map may just do fine.

      Your first example, having two if's to check the same thing, isn't really analogous to combining grep's since each grep is checking different things.

        Actually, I quite often find that the first of these two is exactly what I want as it makes what I'm doing much more clear. Othertimes, I use the latter.

        Horses for courses I guess, but I think that in most every case I can recall, I find that <code> if( $var == 1 and $var == 2 )} doSomething(); } <code>

        is as clear if not clearer than nested ifs as it clearly demonstrates that doSomething is dependant upon both condition; removes the potential for inadvertant mis-inclusions; and clarifes through the reduced clutter of unnecessary punction and syntax.

        as well as whether there are other things I want to do in the $var==1 case but only if $var2!=2.

        That is a different case, and a) requires the separation of the tests; b) is clarified by that separation.

        In the cited case, the artificial separation leads (me) to questions about what was really in the mind of the author when the constructed the code. Questions that serve to confuse rather than clarify; doubt rather than know.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "Science is about questioning the status quo. Questioning authority".
        The "good enough" maybe good enough for the now, and perfection maybe unobtainable, but that should not preclude us from striving for perfection, when time, circumstance or desire allow.
        I err on the side of caution (wrt '&&' vs. 'and ) and use
        if ( $var1 == 1 and $var2 == 2 ) { doSomething(); }


        of course, with if's, it all depends on the logic branching outside of that particular if statement. It's not a "set in stone" decision.
      Because it's apples and oranges. doSomething() and doSomethingElse() aren't related via a pipeline, which the conditionals in grep are. So, by placing unrelated conditionals in their own greps, I give myself the opportunity to throw a map in there, if I feel like it. Putting them in the same grep removes that possibility.

      My criteria for good software:
      1. Does it work?
      2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
      I don't get the logic of this.

      As an occasional user of multiple greps, I find

      @var = something1 grep { something2 && something3 } map { something4 } keys %something5;

      less readable than

      @var = something1 grep { something2 && something3 } map { something4 } keys %something5;

      But sometimes, something2 && something3 is too long, so I break them down into:

      @var = something1 grep { something2 } grep { something3 } map { something4 } keys %something5;

      And yes, I sometimes do

      if( $var1 == 1 ) { if( $var2 == 2 ) { doSomething(); } }

      in preference to

      if( $var1 == 1 && $var2 == 2 ) { doSomething(); }

      when the condition becomes quite long.

        I agree that
        @var = something1 grep { something2 && something3 } map { something4 } keys %something5;
        isn't all that readable, but you can do
        @var = something1 grep { something2 && something3 } map { something4 } keys %something5;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://468694]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (6)
As of 2024-04-23 17:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found