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

Jens Persson jens at bitcycle.com
Wed Mar 9 07:18:16 CST 2016


+1, I don't remember ever making a mistake (in a trailing-comma-allowing
language) that would have been caught if trailing commas had been
considered an error. But I do remember editing commas a lot in languages in
which trailing commas are considered an error.

(I would also be in favor of whitespace-separated elements (instead of the
current comma+optionalButAlmostAlwaysInPracticeWhitespace-separated
elements), but I'm 99% sure that would never be accepted by the community.)


On Wed, Mar 9, 2016 at 1:54 PM, 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
>



-- 
bitCycle AB | Smedjegatan 12 | 742 32 Östhammar | Sweden
http://www.bitcycle.com/
Phone: +46-73-753 24 62
E-mail: jens at bitcycle.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160309/6f29b994/attachment.html>


More information about the swift-evolution mailing list