[swift-evolution] API Guidelines Update

Rudolf Adamkovic salutis at me.com
Thu Feb 25 12:25:29 CST 2016


Oh, all right then.

R+

Sent from my iPhone

> On 25 Feb 2016, at 18:17, Dave Abrahams <dabrahams at apple.com> wrote:
> 
> 
>> on Thu Feb 25 2016, Rudolf Adamkovič <salutis-AT-me.com> wrote:
>> 
>> Is there a reason we can’t use the type system to do the work for us? So, instead of:
>> 
>> A.trim(B)
>> A.trimming(B)
>> 
>> … we would have:
>> 
>> A.trim(B)
>> A.trim(B) -> A
>> 
>> In cases like “dropFirst” where the function returns something, we would use an “out” parameter:
>> 
>> A.dropFirst(B)
>> A.dropFirst(B, out: X)
>> 
>> In this case X is the dropped element.
>> 
>> So, this approach would require implementing “out” parameters (in addition to “inout” we have today).
>> 
>> I’m no expert and I’m probably missing something here. Is there additional ambiguity I’m not aware of?
> 
> Hi Rudolf,
> 
> This possibility has been discussed in earlier threads.  I suggest
> you read those, then ask again if you still have questions.
> 
> Thanks!
> 
>> R+
>> 
>>> On 25 Feb 2016, at 02:10, David Owens II via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> 
>>>>> The noun tells you the object that will be worked with.
>>>>> 
>>>>> `stringByTrimmingCharactersInSet(_:)` - return a string by trimming characters in set
>>>>> 
>>>>> `trimCharactersInSet(_:)`, `trim(_:)`, and `trimming(_:)` all read:
>>>>> return myself by trimming characters in set; there is no noun, so it
>>>>> is implied that it's the caller of the function.
>>>> 
>>>> I disagree. The first two form imperative verb phrases, and do not imply
>>>> to me that anything will be returned.  Furthermore, I think for anyone
>>>> who works in a language with mutation it is natural to assume that
>>>> imperative-verb-phrase methods might mutate the receiver and return
>>>> nothing.  This is not a new idea; Cocoa already does things this way.
>>> 
>>> "return myself" was a poor word choice; "perform on myself" would have been better and more accurate. 
>>> 
>>> There are many contexts where chaining is preferred, so
>>> foo.trim().trim().filter().trim() would be a valid use case. That
>>> was the sample running in my head when I wrote that section and why
>>> I wrote "return myself".
>>> 
>>> I also agree with you that an imperative verb phrase implies
>>> mutation, and I think that part is covered in the guidelines well.
>>> 
>>>>> The first two guidelines already captures this sentiment as well:
>>>>> 
>>>>> 1. "Those without side-effects should read as noun phrases".
>>>>> 2. "Those with side-effects should read as imperative verb phrases."
>>>> 
>>>> I know what the guidelines say and what they're supposed to mean, and I
>>>> can't see how they support your point in any way.  Neither “trimming b”
>>>> nor “a trimming b” is an imperative verb phrase in English.  It is
>>>> always a noun phrase.
>>> 
>>> True, `trimming` is not an imperative verb phrase; strike it from my example list.
>>> 
>>>> Yes, that's true.  You have to think ahead about API evolution if you
>>>> don't want to break users.  That goes for naming as well as anything
>>>> else.  If I said, “related APIs should form a distinguishable family,”
>>>> you probably wouldn't argue (would you?) but that guideline could lead
>>>> to exactly the same sequence of events.
>>> 
>>> Maybe, but I don't necessarily think that grouping mutable and
>>> non-mutable into the same family is the right approach.
>>> 
>>> -David
>>> 
>>> _______________________________________________
>>> 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