[swift-evolution] When to use argument labels, part DEUX

Dave Abrahams dabrahams at apple.com
Sun Feb 7 09:33:24 CST 2016


on Sat Feb 06 2016, Matthew Judge <swift-evolution at swift.org> wrote:

> This issue is going to surface any time a method with a preposition and a single defaulted argument. I would say:
>
> copy(with: )
>
> Although I think we might have problematic results no matter what guidelines we use for
>
> func doSomethingWith(completionHandler: (()->Void)? = nil)
>
> since this can be called as
>
> doSomethingWith() // doSomething()
>
> Or
>
> doSomethingWith {...} // doSomething {...}

Here are the problems with putting the preposition inside the parentheses:

1. You can't "distribute" the preposition over a number of arguments:

       removeTracksHaving(mediaType: x, composer: y)

   you end up with 

       removeTracks(havingMediaType: x, composer: y)

   if you try to fix this with conjunctions 

       removeTracks(havingMediaType: x, andComposer: y, andLength: z)
                                        
   and the first argument has a default, you end up with the wrong
   implied semantics at the call site:

       removeTracks(andComposer: y)
       removeTracks(andLength: z)

2. You have to write:

       move(toX: horizontal, y: vertical)
   
Here are the problems with putting the preposition outside the
parentheses:

1. If all arguments have defaults and the method is called with zero
   arguments you have a dangling preposition as noted by Matthew.  This
   only happens 

2. You have to write:

       moveFrom(a, to: b)
   
IMO the consequences of putting prepositions inside the parens are worse
than the consequences of putting them outside.


>> On Feb 6, 2016, at 15:47, Jean-Daniel Dupas via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> 
>>> Le 6 févr. 2016 à 21:15, Douglas Gregor via swift-evolution <swift-evolution at swift.org> a écrit :
>>> 
>>> 
>>> 
>>> Sent from my iPhone
>>> 
>>>> On Feb 6, 2016, at 9:21 AM, Thorsten Seitz <tseitz42 at icloud.com> wrote:
>>>> 
>>>> So the preposition should move into the argument label if the argument is optional?
>>>> 
>>>> copy(withZone: zone = nil)
>>> 
>>> Zone is redundant with type information. 
>>> 
>>> copy(with:)?
>>> copy(withZone:)?
>> 
>> Wouldn’t it be possible to simply drop the copyWithZone: method that
>> is deprecated for some times now (To quote the doc: Zones are
>> ignored on iOS and 64-bit runtime on OS X. You should not use zones
>> in current development).
>> 
>>> 
>>>> -Thorsten 
>>>> 
>>>> 
>>>>> Am 06.02.2016 um 14:45 schrieb Matthew Judge via swift-evolution <swift-evolution at swift.org>:
>>>>> 
>>>>> Very first method
>>>>> 
>>>>> copyWith(zone: Zone = nil)
>>>>> 
>>>>> can be called as
>>>>> 
>>>>> copyWith()
>>>>> 
>>>>> I'm assuming this is still something we don't want right?
>>>>> 
>>>>>> On Feb 6, 2016, at 02:16, Douglas Gregor via swift-evolution <swift-evolution at swift.org> wrote:
>>>>>> 
>>>>>> 
>>>>>>> On Feb 5, 2016, at 1:32 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>>>>>>> 
>>>>>>> 
>>>>>>> Given all the awesome feedback I've gotten on this thread, I went back
>>>>>>> to the drawing board and came up with something new; I think this one
>>>>>>> works.  The previously-stated goals still apply:
>>>>>> 
>>>>>>> [snip goals]
>>>>>> 
>>>>>>> P.S. Doug is presently working on generating new importer results, based
>>>>>>>    on these guidelines, for your perusal.  They should be ready soon.
>>>>>> 
>>>>>> Here’s a link:
>>>>>> 
>>>>>>    https://github.com/apple/swift-3-api-guidelines-review/pull/10/files
>>>>>> 
>>>>>> Feedback welcome!
>>>>>> 
>>>>>>    - Doug
>>>>>> 
>>>>>> _______________________________________________
>>>>>> 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
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-- 
-Dave



More information about the swift-evolution mailing list