Hi Kay

On 2017-05-24 10:19, Kay C Lan via use-livecode wrote:
In that last one the only inference I could find was that due to the
probability that in 97% of use 'fall through' is not intended, a whole
heap of typing could be saved if no keyword (break) was required for
the 97%, and a keyword was only used to activate fall through. i.e.

switch yourName
case "Mark"
  -- do something
break
case "John"
case "Jon"
  -- do somethingElse
break
case "Ali"
  -- do anotherThing
break
end switch

would become

switch yourName
case "Mark"
  -- do something
case "John"
   fall --or some other keyword
case "Jon"
  -- do somethingElse
case "Ali"
  -- do anotherThing
end switch


11 less character to write. Is this the only problem with the current
implementation of Switch?

Okay so I was perhaps a little vociferous in what I said... However, fallthrough is the key problem - there have been numerous subtle bugs in the engine due to it
(similarly, switch statements without 'default' can cause subtle
bugs too - if you add a value to an enum, but don't update all the switches which
switch on it).

Perhaps a better model would be to use 'continue', rather than 'break':

switch yourName
  case "Mark"
    -- do something and finish
  case "John"
    continue
  case "Jon"
    -- do something else
end switch

The idea being that 'continue' in a case, jumps to the next choice to check. This works particularly nicely when you don't have an expression, so the cases can be expressions as that essentially gives you a 'match' type construct with back-tracking (quite useful for processing hierarchical arrays and transforming them - a common operation in writing compilers, for example).

However, it would probably be better to change the switch syntax to use different keywords (perhaps choice?). The 'switch'/'case'/'break' paradigm is so ubiquitous (due to C) that making it work differently would be very jarring.

Warmest Regards,

Mark.

--
Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to