# C# Language Design Notes for Nov 29, 2017 ***Warning: These are raw notes, and still need to be cleaned up. Read at your own peril!*** # Match expression Current proposal: - Infix vs prefix `switch` - `switch` vs `match` - curlies or parens for body - `case` or not - arrows? - discards or defaults? - also need to remember when clauses If it's too similar to switch statements, then it sets certain expectations. If it's too different, it's not utilizing existing intuition. Should it be a verb/command? Not many expression keywords are that (`select` is an exception, though). `case` is heavyweight, but helps visually separate the issues. ``` c# state = (state, action) switch ( (DoorState.Closed, Action.Open) => DoorState.Opened, (DoorState.Opened, Action.Close) => DoorState.Closed, (DoorState.Closed, Action.Lock) => DoorState.Locked, (DoorState.Locked, Action.Unlock) => DoorState.Closed, _ => state); state = match (state, action) { (DoorState.Closed, Action.Open) => DoorState.Opened, (DoorState.Opened, Action.Close) => DoorState.Closed, (DoorState.Closed, Action.Lock) => DoorState.Locked, (DoorState.Locked, Action.Unlock) => DoorState.Closed, _ => state }; state = switch (state, action) { case (DoorState.Closed, Action.Open): DoorState.Opened case (DoorState.Opened, Action.Close): DoorState.Closed case (DoorState.Closed, Action.Lock): DoorState.Locked case (DoorState.Locked, Action.Unlock): DoorState.Closed case _: state }; ``` The last one is subject to ambiguity-like situations between expression and statement `switch`. We should also consider nesting of match expressions. No matter what syntax we choose, we'll get requests for doing more things in expressions. We can live with that. Parens look too much like a list of *expressions*. Arrows make it look like lambda expressions. ## Decisions We agree that we will not use the keyword `default`. You can use `_`, and in the rare case where that's defined, you can use `var _`. We like curly braces for the grouping. The rest is up in the air. We'll stay with the first version for now in the prototype, other than the curly braces. # Where and when can identifier appear? # Syntax for property patterns Not urgent ``` c# ```