Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

•Re: Re: Tact and the Monastery

by merlyn (Sage)
on Sep 15, 2002 at 00:34 UTC ( [id://197959]=note: print w/replies, xml ) Need Help??


in reply to Re: Tact and the Monastery
in thread Tact and the Monastery

My rule is that a temporary variable is fine if it can be related to the application in some way, and not just an artifact of optimization. One way to tell is if you can give it a truly meaningful name. If you can't, see if you can eliminate it.

-- Randal L. Schwartz, Perl hacker

Replies are listed 'Best First'.
Re: •Re: Re: Tact and the Monastery
by rir (Vicar) on Sep 15, 2002 at 05:56 UTC
    My rule is that a temporary variable is fine if it can be related to the application in some way, and not just an artifact of optimization.
    One way to tell is if you can give it a truly meaningful name. If you can't, see if you can eliminate it.

    There is sense & beauty in that. But it does require a high degree of Perl knowledge.

    Corollaries can be derived.

    Temporary variables should be named so that it is obvious that they are temporaries.

    Temporary variables should be scoped to advertise their ephemeral nature.

    For those who can't readily parse dense Perl temporary variables are like the x modifier to m//.

Variable Naming
by rir (Vicar) on Sep 18, 2002 at 02:48 UTC
    a temporary variable is fine if it can be related to the application in some
    way, ... One way to tell is if you can give it a truly meaningful name. If you can't,
    see if you can eliminate it.

    From early on I have been a believer in good names. The above as inspired me to
    raise the level of quality I try to achieve in naming. A good name should
    clarify obscure/advanced/complex/efficient 1 code by expressing what the variable
    should be.

    It is going to be tough to break the habit of using result for return values.


    1 Choose one. Define yourself.

      Here is a example of trying to learn from our betters and getting confused. The node Randal does it again refers to an article by Randal Schwartz.

      I found this snippet of code that uses a variable name $old_flag.
      sub wanted { return unless -f $_; my $old_flag = -M $_ > 180 ? 'old' : 'new'; $ages{$File::Find::dir}{$old_flag}++; }
      My confusion arises because I would have expected $old_flag to hold a true/false value. Shouldn't this variable be named something like $age_status. This would make it "sound" better to say : $age_status is new or old.

      How should this be handled?

        sub wanted { return unless -f $_; my $old_flag = -M $_ > 180 ? 'old' : 'new'; $ages{$File::Find::dir}{$old_flag}++; }
        Likely this is in a little script and I'd have no
        complaint
        with its expeditious style. Something of the
        thank-goodness-I-got-it-to-work style with which I am quite
        familiar.

        There is certainly a trap of believing variable names.
        Like believing the documentation.

        This looks like code that was refactored because the
        routine name also seems to reflect a time when the author
        was going to use a boolean return here and effect his count
        elsewhere.

        If this was part of a larger body of code...
        My first concerns, assuming it does what is wanted, are:

        • Is 180 magic?
        • Where did %ages come from?
        • Are 'old' and 'new' magical, Hash keys can be a difficult call on magicalness.
        • Is the routine name okay. Maybe a leading underscore.

        The $old_flag might make my list, a meaningless name like
        $var seems better. But it is an issue for only two lines.

        I would consider inlining:

        # untested if ( -f $file) { $age{$File::Find::dir}{ -M $file < 180 ? 'old' : 'new' }++; }

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (9)
As of 2024-04-18 14:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found