Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^4: Idiomatic optimizations

by tadman (Prior)
on May 01, 2002 at 08:37 UTC ( #163222=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Re: Idiomatic optimizations
in thread Idiomatic optimizations

Don't forget that ?: can get dangerous, not unlike juggling running chainsaws. It's a great show, but is liable to injure yourself something fierce:
$foo = $a? $b? $c : $d? $e : $f : $g : $h;
Sometimes an if is more verbose, but undeniably precise.

Instead of getting carried away with ?:, you can sometimes compact it using the regular logical operators || and &&. It really depends on what you're working with.

Replies are listed 'Best First'.
Re: Re^4: Idiomatic optimizations
by demerphq (Chancellor) on May 02, 2002 at 13:13 UTC
    Hmm I sort of agree with your point, but Im troubled by your fierce but syntactically incorrect example (ternary ops should always have the same number of '?' as ':' )
    $a=1;$b=2;$c=3;$d=4;$f=5;$g=6;$h=7; $foo = $a? $b? $c : $d? $e : $f : $g : $h; print $foo; __END__ syntax error at C:\temp\ternary.pl line 2, near "$g :" Execution of C:\temp\ternary.pl aborted due to compilation errors.
    I believe that you meant to say
    $foo = $a ? $b ? $c : $d ? $e : $f : $g;
    My personal rule of thumb is that ternary ops should not be nested but may be chained. Thus I would say that your example could be rewritten
    $foo = !$a ? $g : $b ? $c : $d ? $e : $f;
    And its a little less troublesome. Even then I personally would add some whitespace so it would look like
    $foo = !$a ? $g : $b ? $c : $d ? $e : $f;
    This and a bit of paretheses would also help your nested example
    $foo = $a ? ($b ? $c : ($d ? $e : $f)) : $g;
    I find that formatting ternaries like this makes them only marginally more difficult to read than if statements, but I still tend to avoid nested ternaries.

    Yves / DeMerphq
    ---
    Writing a good benchmark isnt as easy as it might look.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://163222]
help
Chatterbox?
[LanX]: Eily don't be sad ... you are the Bishop of our hearts.
[marto]: 1nickt, I just said that in a Sean Connery accent
[LanX]: Discipulus++ # Bi-Shop
[Eily]: is the Bishop of hearts higher or lower ranked than the Jack?
[ambrus]: Higher.
[Eily]: Discipulus what's the merchandise? Other bi-people?
[1nickt]: marto would like to hear that. Of course he speaks very deliberately and dramatically, allowing pauses between words, so if anybody could pull it off it would be him, or someone impersonating him ...
[Eily]: Discipulus that's a chess joke BTW right? Because bishops don't walk straight :D
[choroba]: stop making chessy jokes about bishops!
[choroba]: I mean cheesy

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (15)
As of 2017-09-26 12:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    During the recent solar eclipse, I:









    Results (294 votes). Check out past polls.

    Notices?