If statements vs case

Richard Gaskin ambassador at fourthworld.com
Mon Feb 26 13:37:13 EST 2007


Hershel wrote:
> Is the below the original code, if yes I'd make some comments if possible.

The switch example is the same, but the if-then example was rewritten in 
an attempt to better match the logic of the switch block.

>> local sResult
>> 
>> on mouseUp
>>  -- number of test iterations:
>>  put 10000 into n
>>  -- load var with all possible values:
>>  put "abcde" into s
>>  --
>>  --
>>  -- TEST 1: if-then
>>  put 0 into sResult
>>  put the millisecs into t
>>  repeat n
>>    --
>>    repeat for each char tVar in s
>>    If tVar ="a" or tVar ="b" then
>>        DoThing1
>>      else                              -------if tVar = "c" or tVar = "d" then
> this one is out of the order how about with out this line because its not in
> sequences and the same thing below its not comparable to the case statement.

If we omit that line then DoThing3 is always triggered for C, D, and E 
as well, and because the if conditions are exclusive E wouldn't move on 
to trigger DoThing4.

The fall-through feature of switch blocks means that in the example 
below only C will trigger DoThing2, but both C and D will trigger 
DoThing3, while E skips those and triggers only DoThing4.  If the value 
of tVar is C, it will first execute DoThing2 and then move on to also 
call DoThing3, but for D it'll skip C's part and call DoThing3 only.

There may be a more effecient way to represent that with if-then than 
what I came up with, but logically I believe it should be equivalent.


>>        if tVar = "c" then
>>          DoThing2
>>        end if
>>        DoThing3
>>      Else If tVar ="e" then
>>        DoThing4
>>      End if
>>    end repeat
>>    --
>>  end repeat
>>  put the millisecs - t into t1
>>  put sResult into tResult1
>>  --
>>  -- TEST 2: switch
>>  put 0 into sResult
>>  put the millisecs into t
>>  repeat n
>>    --
>>    repeat for each char tVar in s
>>      switch tVar
>>      case "a"
>>      case "b"
>>        DoThing1
>>        break
>>      case "c"
>>        DoThing2
>>      case "d"
>>        DoThing3
>>        break
>>      case "e"
>>        DoThing4
>>      end switch
>>    end repeat
>>    --
>>  end repeat
>>  put the millisecs - t into t2
>>  put sResult into tResult2
>>  --
>>  -- show results:
>>  put "if:"&t1 &"ms"&&"switch:"& t2&"ms"&cr&\
>> "if result:"& tResult1 &&"switch result:"&tResult2
>> end mouseUp
>> 
>>
>> on DoThing1
>>  add 1 to sResult
>> end DoThing1
>> 
>> on DoThing2
>>  add 2 to sResult
>> end DoThing2
>> 
>> on Dothing3
>>  add 3 to sResult
>> end Dothing3
>> 
>> on DoThing4
>>  add 4 to sResult
>> end DoThing4


Mark Smith wrote:
> Richard, I bow to your more extensive test. All I did was a simple  
> five-way switch/if (based on a random input)  that actually did  
> nothing, so I think your test is probably more useful.

I wouldn't be so sure. :)  It wouldn't be the first time I've flubbed a 
test.  As Eric Chatonet says, merde happens.

In fact, in terms of real-world performance neither random values nor a 
fixed list will reveal true real-world results, since the frequency of 
accessing the different parts of each example will depend on the 
specifics of the context it's used it.  In some respects, a traditional 
Chinese scientist might concur with your use of random here. :)

-- 
  Richard Gaskin
  Fourth World Media Corporation
  ___________________________________________________________
  Ambassador at FourthWorld.com       http://www.FourthWorld.com



More information about the use-livecode mailing list