[swift-evolution] [Draft] Allow trailing commas in argument lists

Adrian Kashivskyy adrian.kashivskyy at me.com
Wed Mar 9 08:30:46 CST 2016


I see the following an advantage of using trailing commas:

If using trailing commas, when adding an item at the end of array, only one line has to be changed (added). If not, two lines are diffed (comma + new element).

So yeah, +1. Because Why Not™. ¯\_(ツ)_/¯


Pozdrawiam – Regards,
Adrian Kashivskyy

> Wiadomość napisana przez Radosław Pietruszewski via swift-evolution <swift-evolution at swift.org> w dniu 09.03.2016, o godz. 15:02:
> 
> JavaScript’s common convention (and weird looking!) to use leading commas is exactly because it can’t do trailing commas.
> 
> Swift already allows trailing commas in arrays. Even if not everyone will know or use this, I see zero harm in allowing trailing commas in argument lists and tuples.
> 
> +1. Because Why Not™.
> 
> — Radek
> 
>> On 09 Mar 2016, at 13:54, Nisse Bergman via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> -1
>> Let’s not go down this path and enable the javascript flamewar of trailing or non-trailing commas. 
>> 
>> Nisse
>> 
>> 
>> 
>>> On 09 Mar 2016, at 01:23, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> Yes please.
>>> 
>>>> On Mar 8, 2016, at 2:07 PM, Grant Paul via swift-evolution <swift-evolution at swift.org> wrote:
>>>> 
>>>> ## Introduction
>>>> 
>>>> Right now, Swift argument lists are not permitted to contain trailing commas. To make multi-line calls easier, we propose allowing trailing commas in argument (and tuple) syntax:
>>>> 
>>>> let person = Person(
>>>>    id: json['id'],
>>>>    name: json['name'],
>>>>    picture: Im2age(picture),
>>>>    friends: friends,
>>>> )
>>>> 
>>>> 
>>>> ## Motivation
>>>> 
>>>> It’s common for functions to take a number of arguments. In some languages, this can make it difficult to figure out what a function does, leading to patterns like fluent interfaces and configuration objects.
>>>> 
>>>> Swift, by contrast, handles this very well. Argument labels make sure parameters aren’t confused even when they’re of the same type. And compared to Objective-C, it’s much easier to write a multi-line list of arguments in Swift.
>>>> 
>>>> However, with a parentheses placement style placing the closing parentheses for a multi-line call on a new line, Swift does not support a trailing comma. Trailing commas have a number of benefits:
>>>> 
>>>> - It is easier to re-arrange lines (especially in certain text editors) when all lines have commas. 
>>>> - Line-based diffs (as used by most source control systems) only show added lines when adding a new parameter to the end, rather than two lines where one just adds the comma.
>>>> - It’s more consistent with other Swift lists which do support trailing commas.
>>>> 
>>>> 
>>>> ## Proposed Solution
>>>> 
>>>> The proposed solution is to allow and ignore trailing commas in argument lists and tuples:
>>>> 
>>>> let person = Person(
>>>>     id: json['id'],
>>>>     name: json['name'],
>>>>     picture: Image(picture),
>>>>     friends: friends,
>>>> )
>>>> 
>>>> let tuple = (
>>>>    color,
>>>>    32,
>>>> )
>>>> 
>>>> 
>>>> ## Detailed Design
>>>> 
>>>> Support for trailing commas in argument lists and tuples would make them consistent with Swift’s handling of array literals, which do support trailing commas:
>>>> 
>>>> let array = [
>>>>     2,
>>>>     4,
>>>>     8,
>>>> ]
>>>> 
>>>> There should not be any impact to existing code from this proposal.
>>>> 
>>>> Support for this syntax is also found in other programming languages like Python, D, and Hack. It’s been proposed for JavaScript (positive response) and PHP (rejected):
>>>> 
>>>> - JavaScript: https://jeffmo.github.io/es-trailing-function-commas/
>>>> - PHP: https://wiki.php.net/rfc/trailing-comma-function-args
>>>> 
>>>> 
>>>> ## Alternatives Considered
>>>> 
>>>> The main alternative is the existing behavior. This has the benefit of standardizing Swift code on a particular style. However, many people will in practice continue to use a style regardless of support trailing commas, especially for cross-language consistency. It could also lead to JavaScript-inspired parameter ordering:
>>>> 
>>>> let person =
>>>>     Person(id: json['id']
>>>>          , name: json['name']
>>>>          , picture: Image(picture)
>>>>          , friends: friends)
>>>> 
>>>> Another alternative would be to support this syntax for function parameters but not tuples. However, this would be an arbitrary inconsistency.
>>>> 
>>>> _______________________________________________
>>>> 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
>> 
>> _______________________________________________
>> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160309/fa397b38/attachment.html>


More information about the swift-evolution mailing list