[swift-evolution] [Review] SE-0084: Allow trailing commas in parameter lists and tuples

Matthew Johnson matthew at anandabits.com
Fri May 13 08:26:33 CDT 2016



Sent from my iPad

> On May 13, 2016, at 1:07 AM, Patrick Smith via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I do it quite a lot, especially for initialising structs, enums. I use it to get the same benefits as a switch statement spread over several lines.
> 
> I think it’s often good to liberally apply new lines, as it aids legibility.
> 
> Here some sample code of mine using it:
> 
> extension ImageGraphic : JSONObjectRepresentable {
>    public init(source: JSONObjectDecoder) throws {
>        try self.init(
>            imageSource: source.decode("imageSource"),
>            width: source.decodeOptional("width"),
>            height: source.decodeOptional("height")
>        )
>    }

+1 to the initialization use case.  You can do type-safe embedded data this way.  Similar to embedding JSON directly, but with type checking and no need for parsing.  In that use case the initializer calls may be intermingled with arrays and may have defaulted parameters.

If that use case matters at all allowing trailing commas in the arrays but not the initializer calls would *feel* inconsistent regardless of the technical distinction.


>    
>    public func toJSON() -> JSON {
>        return .ObjectValue([
>            "imageSource": imageSource.toJSON(),
>            "width": width.toJSON(),
>            "height": height.toJSON()
>        ])
>    }
> }
> 
> 
>> On 13 May 2016, at 3:01 PM, Chris Lattner via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> On May 12, 2016, at 4:50 PM, Joe Groff <jgroff at apple.com> wrote:
>>>>>    --- a.swift
>>>>>    +++ a.swift
>>>>>     foo(
>>>>>       x: 0,
>>>>>    -  y: 1
>>>>>    +  y: 1,
>>>>>    +  z: 2
>>>>>     )
>>>>> 
>>>>> Trailing commas avoid this:
>>>>> 
>>>>>    --- a.swift
>>>>>    +++ a.swift
>>>>>     foo(
>>>>>       x: 0,
>>>>>       y: 1,
>>>>>    +  z: 2,
>>>>>     )
>>>> 
>>>> You’re arguing that you want to read Swift code written like this?
>>> 
>>> I wouldn't mind it.
>> 
>> I personally find that style repulsive :-) and I haven’t seen swift code commonly doing it.  I’m not sure that we want to encourage it either.
>> 
>>> The standard library already uses this style for function parameters, modulo the trailing comma, and I certainly prefer it to:
>>>    
>>>>    --- a.swift
>>>>    +++ a.swift
>>>>     foo( x: 0
>>>>        , y: 1
>>>>    +   , z: 2
>>>>        )
>> 
>> I agree that this is even worse, but I also haven’t seen this used in Swift code.  Have you?   Swift’s strictness with argument labels makes any of this pretty unappealing to use.
>> 
>> If we were really concerned about this, a narrower way to solve the same problem would be to allow a comma before the ), but *only* when there is a newline between them.  I still don’t see why we’d want to encourage this though.
>> 
>> -Chris
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list