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