switch-statementdartfall-through

Switch fallthrough in Dart


I started learning Dart today, and I've come across something that my google skills are having trouble finding.

How do I have a fall-through in a non-empty case?

My use case is this: I'm writing a sprintf implementation (since dart doesn't have this too), which would work except for this fall-through thing. When parsing the variable type you can, for example, have "%x" versus "%X" where the upper case type tells the formatter that the output is supposed to be uppercase.

The semi-pseudocode looks like:

bool is_upper = false;
switch (getType()) {
    case 'X':
      is_upper = true;
    case 'x':
      return formatHex(is_upper);
}

The other ways I can think of doing this, would one of the following

1:

switch (getType()) {
  case 'X': case 'x':
    return formatHex('X' == getType());
}

2:

var type = getType();
if (type in ['x', 'X']) {
   return formatHex('X' == getType());
}

Now, the second choice almost looks good, but then you have to remember that there are eleven cases, which would mean having eleven if (type in []), which is more typing that I'd like.

So, does dart have some // //$FALL-THROUGH$ that I don't know about?

Thanks.


Solution

  • The Dart specification gives a way for a switch case to continue to another switch case using "continue":

    switch (x) {
      case 42: print("hello");
               continue world;
      case 37: print("goodbye");
               break;
      world:  // This is a label on the switch case.
      case 87: print("world");
    }
    

    It works in the VM, but sadly the dart2js switch implementation doesn't yet support that feature.