Switch fallthrough in Dart

Naddiseo picture Naddiseo · Sep 23, 2012 · Viewed 11.3k times · Source

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.

Answer

Lasse Nielsen picture Lasse Nielsen · Sep 28, 2012

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.