Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: if variants

by apotheon (Deacon)
on Oct 20, 2004 at 18:57 UTC ( #400952=note: print w/ replies, xml ) Need Help??


in reply to Re: if variants
in thread if variants

I edited to include some brief mention of the undesirability of the != operator there. Thanks for the suggestion.

- apotheon
CopyWrite Chad Perrin


Comment on Re^2: if variants
Replies are listed 'Best First'.
Re^3: if variants
by ihb (Deacon) on Oct 21, 2004 at 14:37 UTC

    It's worth noting, by the way, that using $foo != 7 as the control statement in an if statement is generally a Bad Idea. The unless statement is designed to cover that need, and using the != operator there just makes the code harder to read later when it must be maintained.

    I second DrHyde (Re^3: if variants). It's definately not bad and neither is it a maintenance trouble. That whole sentence above should be removed from your text. It's just plain wrong.

    The unless keyword is made to make you write code more like a natural language. It's not there to take !='s place in if expressions. They can both coexist happily and be mixed however you please.

    Why the combination of unless and else is shunned by many is because it's a sort of double negation.

    if (X) { ... } else { ... }
    can be read
    if (X) { ... } if (not X) { ... }
    "unless X" can be read "if not X". Combining this gives you
    unless (X) { ... } else { ... } if (not X) { ... } if (not not X) { ... }
    which just doesn't read well. Logically it's not strange but it's a funny and inappreciated way of expressing oneself.

    My own (rather inconsistent) style is to use unless for exceptional behaviour, and if for expected/wanted behaviour. When using unless I usually want something, but something might stop me from doing that. With if I express that I perhaps want something, perhaps not.

    print ... unless $quiet; # I want to print. exit if $done; # I might want to exit here. exit unless $stay; # I want to exit here, but apparently # something is holding me back.
    The examples can perhaps be better, and I'm not consistant myself in my use, but that's give you an idea of how I tend to use them.

    ihb

    See perltoc if you don't know which perldoc to read!
    Read argumentation in its context!

      Thanks for the clarification. Mea culpa.

      - apotheon
      CopyWrite Chad Perrin
Re^3: if variants
by DrHyde (Prior) on Oct 21, 2004 at 08:40 UTC
    Noooooo! != is fine. It's unless ... else that is hideously broken!
      I can understand avoiding the != in an if statement, since using unless covers that functionality. I don't know why unless . . . else would be "bad", however. Explain?

      - apotheon
      CopyWrite Chad Perrin
        In English, saying "if this, do that, else do the other" makes sense and is easy for a person to parse. However "unless this, do that, else do the other" is much harder to parse because the "else" clause is a double negative (or even a triple negative if you have "unless not this"). Same applies to perl.

        While you could, perhaps, argue that "if not this, do that, else do the other" is also a double negative, it's still easy to parse because it's familiar. We see it in every programming language ever.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (8)
As of 2015-07-08 01:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (93 votes), past polls