There are a few roads not taken: “switch ()” with boolean case expressions has not showed itself worthy yet.
Yep, this one can sit on the shelf.
I’d also like to point out “switch (a, b)” as a possible area of future work for switch, where the thing after “switch” is a more generalized argument expression
ML supports this, because it just treats the operand as a tuple, and automatically destructures tuples. The killer use case is, of course, FizzBuzz:
switch (n % 3, n % 5) { case (0, 0) -> "FizzBuzz"; case (0, _) -> "Fizz"; case (_, 0) -> "Buzz"; default -> n.toString(); }
1. Allow certain simple statements after “->” without requiring “{ … }” wrappers.
We already do this with `throw`, but could extend. I'm waiting for Valhalla to make `void` a type, and then see how painful it is to merge statement switch with void expression switch. (Now that we've totalized, it's easier.)
2. Allow a way to add a given case to the “remainder” set, to be treated similarly to “built-in” remainder processing. Proposed syntax: “throw;” as in “case null->throw;”. (Raises the question of whether to support such a notation outside of switch, but we could just say “no”. Or spell it “throw default;” or “throw assert”.)
There's two aspects of this: matching on the remainder (case else?), and denoting the default throw.