[swift-evolution] ed/ing, InPlace, Set/SetAlgebra naming resolution
Dave Abrahams
dabrahams at apple.com
Sat Feb 13 12:55:28 CST 2016
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)
> func removingMembers(in other: Self) -> Self // subtract
> mutating func removeMembers(in other: Self)
>
> If it would help with clarity, we could replace "in" with "foundIn"
> above.
--
-Dave
More information about the swift-evolution
mailing list