> Of these alternatives, the core team found the last one to be the best 
> choice. 'case' and 'let' conditions should each specify a single declaration, 
> comma should remain the condition separator, and the 'where' keyword can be 
> retired from its purpose as a boolean condition introducer. Some code becomes 
> more verbose, but in common formatting patterns, it aligns more nicely, as in:
> 
>       guard
>         let x = foo(),
>         let y = bar(),
>         let z = bas(),
>         x == y || y == z else {
>       }
> 
> and though it breaks commonality between 'let' conditions and 'let' 
> declarations, it's more important to preserve higher-level consistency 
> throughout the language in how components of expressions and statements are 
> separated.

I think this is a pretty good way to split the baby, especially because it 
actually improves an issue which always led to awkward indentation problems.

Even with this change, I believe you'll be able to avoid redundant `case` 
keywords by using tuples:

        guard case (.none, .none, .none) = (foo(), bar(), bas()) else {

However, if-let does not permit the analogous construct:

        guard let (x, y, z) = (foo(), bar(), bas()) else {

Now that we're moving away from allowing compound if-lets, I think it might be 
a good idea to revisit that decision. Would this be better handled as a 
separate proposal?

-- 
Brent Royal-Gordon
Architechies

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

Reply via email to