The Order of WHEN Statements

Discussions about the BBC BASIC language, with particular reference to BB4W and BBCSDL
MattC
Posts: 114
Joined: Mon 16 Apr 2018, 06:17

The Order of WHEN Statements

Post by MattC »

Hi.

This is more for information rather than a question. (Forgive me if this information is recorded elsewhere, but I couldn't find it.)

I did a simple trial on the order of WHEN statements in a CASE...ENDCASE clause.

Code: Select all

      T% = TIME
      FOR I% = 1 TO 10000000
        A% = 1 : REM set this to 10 for a second run
        CASE A% OF
          WHEN 1:
          WHEN 2:
          WHEN 3:
          WHEN 4:
          WHEN 5:
          WHEN 6:
          WHEN 7:
          WHEN 8:
          WHEN 9:
          WHEN 10:
        ENDCASE
      NEXT
      U% = TIME
      PRINT U%-T%
It does absolutely nothing, but it does show that the order of WHEN statements is important when speed is necessary. This conclusion seems obvious when you understand that, unlike a succession of IF...THEN statements, once a WHEN condition is used, the others are completely ignored.

The results (on my computer) are that when A% is set to 1 it takes 1510ms to run (151ns each loop), and when it's set to 10 it takes 4820ms to run (482ns each loop). Calculation suggests that each WHEN line will take an additional 37ns, approx. This may not seem much to the average programmer, but it may well add up if there are a lot of loops and CASE clauses.

Please feel free to add anything to this, or correct me if I'm wrong.

Matt
KenDown
Posts: 327
Joined: Wed 04 Apr 2018, 06:36

Re: The Order of WHEN Statements

Post by KenDown »

The other aspect of the order of WHEN statements is that you need to order them carefully, otherwise the one you want may never actually be reached because some other condition was fulfilled first.