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.
break
statement no longer causes an Exception (since Dart 3, I believe). That means you should only usebreak
where you need an emptycase
(as empty cases would normally fallthrough). See dart.dev/language/branches#switch-statements – Centurion