[swift-evolution] [Draft] Allow trailing commas in argument lists
Brentley Jones
contact at brentleyjones.com
Wed Mar 9 07:24:37 CST 2016
+1
On Wed, Mar 9, 2016 at 7:18 AM Jens Persson via swift-evolution <
swift-evolution at swift.org> wrote:
> +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
>
> _______________________________________________
> 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/172ec6af/attachment.html>
More information about the swift-evolution
mailing list