[swift-evolution] ed/ing, InPlace, Set/SetAlgebra naming resolution

Dave Abrahams dabrahams at apple.com
Sat Feb 13 13:21:36 CST 2016


on Sat Feb 13 2016, Dave Abrahams <swift-evolution at swift.org> wrote:

> on Sat Feb 13 2016, Dave Abrahams <dabrahams-AT-apple.com> wrote:
>
>> The following message is a courtesy copy of an article
>> that has been posted to gmane.comp.lang.swift.evolution as well.
>>
>> on Fri Feb 12 2016, Ricardo Parada <swift-evolution at swift.org> wrote:
>>
>>> Hi all,
>>>
>>> I can’t make up my mind.  Let me propose two different alternatives
>>> that I’m not sure if they have been considered:
>>>
>>> ALTERNATIVE 1
>>>
>>> Non-mutable (noun-based)
>>>
>>> -  func union(other: Self) -> Self
>>> +  func union(other: Self) -> Self		Assumes union is a noun, i.e. not a verb
>>>
>>> -  func intersect(other: Self) -> Self
>>> +  func intersection(other: Self) -> Self
>>>
>>> -  func subtract(other: Self) -> Self
>>> +  func subtraction(other: Self) -> Self
>>>
>>> -  func exclusiveOr(other: Self) -> Self
>>> +  func symmetricSubtraction(other: Self) -> Self
>>>
>>> Mutable (verb-based)
>>>
>>> -  mutating func unionInPlace(other: Self)
>>> +  mutating func unite(other: Self)
>>>
>>> -  mutating func intersectInPlace(other: Self)
>>> +  mutating func intersect(other: Self)
>>>
>>> -  mutating func subtractInPlace(other: Self)
>>> +  mutating func subtract(other: Self)
>>>
>>> -  mutating func exclusiveOrInPlace(other: Self)
>>> +  mutating func symmetricSubtract(other: Self)
>>>
>>> Comments: 
>>>
>>> With this alternative we keep the union name which I assume is
>>> popular.  However, one has to accept unite as a verb (for the mutable
>>> version) as I wanted all the mutable methods use verbs for
>>> consistency.  I think unite is acceptable because it can be found in
>>> the dictionary and it is a verb.
>>>
>>> Notice that all the non-mutable methods use nouns: union,
>>> intersection, subtraction and symmetricSubtraction.
>>>
>>> I understand some may oppose to symmetricSubtraction saying that
>>> symmetricSubraction is not as common as "exclusive or".  However,
>>> using symmetricSubtraction is consistent with subtraction and it hints
>>> to a variation of the “subtraction" operation.  We will get used to it
>>> quickly / easily.
>>>
>>> The mutable methods all use verbs:  unite, intersect, subtract and symmetricSubtract.
>>>
>>> ALTERNATIVE 2
>>>
>>> Non-mutable
>>>
>>> -  func union(other: Self) -> Self
>>> +  func adding(other: Self) -> Self
>>>
>>> -  func intersect(other: Self) -> Self
>>> +  func intersecting(other: Self) -> Self
>>>
>>> -  func exclusiveOr(other: Self) -> Self
>>> +  func exclusiveOring(other: Self) -> Self
>>>
>>> -  func subtract(other: Self) -> Self
>>> +  func removing(other: Self) -> Self
>>>
>>> Mutable
>>>
>>> -  mutating func unionInPlace(other: Self)
>>> +  mutating func add(other: Self)
>>>
>>> -  mutating func intersectInPlace(other: Self)
>>> +  mutating func intersect(other: Self)
>>>
>>> -  mutating func exclusiveOrInPlace(other: Self)
>>> +  mutating func exclusiveOr(other: Self)
>>>
>>> -  mutating func subtractInPlace(other: Self)
>>> +  mutating func remove(other: Self)
>>>
>>> Comments: This alternative gives up on union in favor or add.  Many
>>> may not like this, that is why I have it as the second alternative.
>>> It brings back exclusiveOr and treats it as a verb.  Some may argue
>>> that exclusiveOr is a noun for the "exclusive or" operation.
>>
>> If we are going to force Set fit the naming guidelines, I would prefer
>> to stay away from the mathematical terms altogether.
>
> Sorry, a few more notes about this:
>
>>    func insertingContentsOf(other: Self) -> Self                 // union
>>    mutating func insertContentsOf(other)
>
> "merge" might be a better verb than "insert"
>
>>    func members(in other: Self) -> Self                           // intersection
>>    mutating func removeMembers(notIn: other)
>>
>>    func removingMembersAndAddingNonMembers(in other: Self) -> Self // symmetric difference
>>    mutating func removeMembersAndAddingNonMembers(in other: Self)
>
> Oops, left a stray "ing" in there:
>
>     mutating func removeMembersAndAddNonMembers(in other: Self)
>
> Another avenue for this one is:
>
>     mutating func invertingMembershipOfContentsOf(other: Self)
>     mutating func invertMembershipOfContentsOf(other: Self)


Dang it, more mistakes.  Trying again:

   func invertingMembershipOfContentsOf(other: Self) -> Self
   mutating func invertMembershipOfContentsOf(other: Self)



-- 
-Dave



More information about the swift-evolution mailing list