Was helping a friend with some code and got inspired. I decided to throw this on list to see if there's any traction.
Idea: Introduce optional argument labels to tuples in switch statements
Motivation: Cases can be less readable when pattern matching tuples. Semantically sugared, optional argument labels could increase readability for complex `switch` statements by incorporating roles into cases.
Here's an example before:
fileprivate func chargeState(for battery: BatteryService)
-> ChargeState
{
switch (battery.state, battery.isCalculating) {
case (.isACPowered, true):
return .calculating(isDischarging: false)
case (.isACPowered, _) where battery.isCharging:
return .charging
case (.isACPowered, _):
return .acPower
case (_, true):
return .calculating(isDischarging: true)
default:
return .batteryPower
}
}
and after:
fileprivate func chargeState(for battery: BatteryService)
-> ChargeState
{
switch (battery.state, calculating: battery.isCalculating) {
case (.isACPowered, calculating: true):
return .calculating(isDischarging: false)
case (.isACPowered, _) where battery.isCharging:
return .charging
case (.isACPowered, _):
return .acPower
case (_, calculating: true):
return .calculating(isDischarging: true)
default:
return .batteryPower
}
}
It's a pretty minor change, and I could see it being added to allow case statements to be more readable with a minimal change to the compiler. I also have a back-burnered proposal I intend to introduce in Phase 2 that would introduce Boolean raw value enumerations for flags.
Thoughts?
-- E