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

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to