On 2017-05-24 12:03, Mark Waddingham via use-livecode wrote:
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).

Okay, so that isn't quite right - for a switch-on-value switch, continue
would have to continue into the top the next case, ignoring the case value which is not quite the same as it would be in switch-on-case-expr switch.

Certainly a 'fallthrough' type keyword would work... However, stepping back and looking at the utility of switch. I'd say that in almost all cases you either want to:

  1) Map a single case to a block of code

  2) Map multiple cases to a block of code

The use-case which causes subtle bugs and errors is where one case requires a 'bit more code' before the others (where code, fallthrough, code is *not* erroneous but intended) - also it is a rarely used pattern in C (because it is difficult to maintain).

Taking this into account, then perhaps a better solution would be ('choose' used here for the sake of argument):

  choose tValue
    when 1
    when 2
    when 3
      -- executes if tValue is 1, 2 or 3
      -- never falls through

    when 4
      -- never falls through

    default
  end choose

This caters for both cases (1) and (2) and is unambiguous.

As I said before, the lack of switch in LCB isn't because we don't want a construct like that; just that we'd like one which doesn't have the issues of C-style switch. (The best way to avoid people accidentally introducing subtle bugs, is to ensure the language is designed to not let them do so!).

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